【そりっどげんそく】

SOLID原則 とは?

最終更新:
💡 変更の影響を抑える、設計の五つの指針

オブジェクト指向設計の5つの基本原則。保守性と拡張性の高いコードを書くためのガイドライン。

📌 このページのポイント
変更の影響と依存を考える五つの指針S変更の理由O拡張を分けるL期待を保つI必要な機能だけD抽象へ依存Dの例:注文処理と、保存する実装注文処理保存用の抽象DBの実装矢印はソースコードの依存の向き型の置換は、利用側の期待を壊さない
上段は原則の比較で、処理順ではありません。下段の注文処理とDBの実装はどちらも保存用の抽象へ依存します。動作中のデータの流れを示す矢印ではありません。
ひよこ ひよこ
単一責任原則って、一つのクラスにメソッド一つ?
ペンギン先生 ペンギン先生
そういう意味ではないよ。同じ業務上の理由で変わる処理をまとめ、別の理由で変わる処理を分ける考え方なんだ。例えば売上の計算規則と画面の見た目は、変更を求める人や目的が違うので、混ぜない設計を考えるよ
ひよこ ひよこ
開放閉鎖原則は、既存コードを絶対に変えないこと?
ペンギン先生 ペンギン先生
拡張に対して開き、修正に対して閉じるという指針だよ。例えば支払い方法を追加するとき、共通の処理まで書き換えず、新しい実装を足せるようにする。既存の正しい処理への変更の波及を抑える狙いで、修正自体を禁止する意味ではないんだ
ひよこ ひよこ
リスコフの置換と、インターフェース分離は?
ペンギン先生 ペンギン先生
置換の原則は、ある型の代わりに別の実装を使っても、利用側が期待する振る舞いを壊さないこと。単に同じメソッド名があればよいわけではないよ。分離の原則は、利用側が使わない機能まで依存せずに済むように、インターフェースを分けることなんだ
ひよこ ひよこ
依存性逆転と、依存性注入は同じ?
ペンギン先生 ペンギン先生
逆転の原則は、業務の規則がDBの細かな実装などへ直接依存せず、抽象へ向けて依存する設計の考え方だよ。例えば注文処理は保存用のインターフェースを使い、具体的な保存処理を差し替えられるようにする。注入は、その実装を外から渡す方法で、原則そのものとは区別しよう
ひよこ ひよこ
五つを機械的に適用すればいい?
ペンギン先生 ペンギン先生
変更の影響や依存関係を考えるために使おう。細かく分けたり、抽象を増やしたりすること自体が目的ではないよ。今の変更でどこが巻き込まれるのかを見て、理解しやすい設計になるかを判断するんだ
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「SOLID原則」って出てきたら「OOP設計の5つの基本原則」と思えればだいたいOK!
📖 おまけ:英語の意味
「SOLID Principles」 = 五つの設計原則の頭文字
💬 S・O・L・I・Dは五つの原則の頭文字だよ。Robert C. Martinの解説などで広まった、設計を考えるための指針なんだ

参考資料

← 用語集にもどる