この記事は設計こばなし Advent Calendar 2023の23日目です。
概要
2023年度、設計力アップのためSOLID原則を学び、社内・社外向け勉強会を開催・発信してきました。
SOLID原則を学習する順番をスペルとおりの順番ではなく、
- Single-responsibility principle(単一責務の原則)
- Interface segregation principle(インターフェース分離の原則)
- Dependency inversion principle(依存性逆転の原則)
- Open/closed principle(開放閉鎖の原則)
- Liskov Substitution Principle(リスコフの置換原則)
にしました。
この順番で学んだ理由、感想について書きます。
SOLID原則の学習順番をS→I→D→O→Lにした理由
SOLID原則について学び始めた時に@taktt7さんのQiita記事を見ました。
そのときの説明の順番が個人的にしっくりきてわかりやすく感じました。
そのため、この記事の順番でSOLID原則を学ぶことに決めました。
1番目にS(単一責務の原則)を学習した感想
単一責務の原則はつぎの原則です。
- クラスは1つの責任のみを持っている
- クラスの変更理由はひとつ
この原則はクラスを形づくる基本だと思います。
原則自体もシンプルで(実践して使いこなすのは難しいと個人的に思っている)、わかりやすくはじめに学習する原則として良いと思います。
2番目にI(インターフェース分離の原則)を学習した感想
インタフェース分離の原則はつぎの原則です。
- 相手に必要なことだけ見せるようにする。必要ないことを見せると関連が必要ないクラスと関連を持ってしまったり変更の影響が大きくなってしまう。
単一責務の原則で1つの責任をもつクラスが理解できていればそれほどインターフェース分離の原則に難しさを感じないと思います。
逆にいうと単一責務の原則のつぎに学ぶと比較的理解しやすい原則かと個人的に思いました。
3番目にD(依存性逆転の原則)を学習した感想
依存性逆転の原則はつぎの原則です。
- 上位レベルのモジュールは下位レベルのモジュールに依存しないようにする。上位も下位も抽象に依存すべきである。
わたしは原則の名前から推測するといきなり高度な内容になると感じました。
ただ、なぜ抽象に依存すべきなのか?、に注目すると理解しやすい原則かと思います。
この依存性逆転の原則がなぜ3番目なのかですが、4番目の開放閉鎖の原則に則るために必要な考え方をこの原則で学ぶからだと考えています。
そういった意味で依存性逆転の原則は3番目に学ぶのが良いと感じました。
4番目にO(開放閉鎖の原則)を学習した感想
開放閉鎖の原則はつぎの原則です。
- 拡張に開かれており(Open)、変更に閉じられていること (Closed)。機能拡張(追加)の際にクライアントコード(機能追加したコードを使う側)に変更が発生しないこと。
この原則に則るために機能追加側のコードは依存性逆転の原則を使います。これでクライアントコードは変更が発生しない構造をつくることが可能になります。
5番目にL(リスコフの置換原則)を学習した感想
リスコフの置換原則はつぎの原則です。
- サブタイプのオブジェクトはスーパータイプのオブジェクトの仕様に従わなければならない
- 基底型オブジェクトを派生型オブジェクトで型安全に代替できること
個人的にSOLID原則の中で一番難しいのがリスコフの置換原則だと思っています。
ただ、この原則も開放閉鎖の原則を学んでいると理解しやすいと思います。
書籍: テスト駆動開発による組み込みプログラミング―C言語とオブジェクト指向で学ぶアジャイルな設計につぎの記載があります。
11.1.3 リスコフの置換原則(Liskov Substitution Principle)
リスコフの置換原則(LSP)はオープン・クローズドの原則(OCP)と同じように聞こえるかもしれない。
これはオープン・クローズドの原則(OCP)とリスコフの置換原則(LSP)がコインの裏表の関係にあるためだ。
開放閉鎖の原則を先に学んでいるとリスコフの置換原則も理解しやすいと思います。
作成資料一覧
SOLID原則の勉強会の資料はこちらに保存しています。よければ参照ください。
No | 開催日 | 勉強会タイトル&資料リンク | Xスペース録音URL |
---|---|---|---|
1 | 2023/7/20 | #1 単一責務の原則 | - |
2 | 2023/8/28 | #2 インターフェース分離の原則 | URL |
3 | 2023/9/28 | #3 依存性逆転の原則 | URL |
4 | 2023/10/26 | #4 開放閉鎖の原則 | URL |
5 | 2023/11/30 | #5 リスコフの置換原則 | URL |