SOLID原則
概要 プログラム設計上の原則である SOLID原則 に関する記事です。個々の原則は何となくわかるものの、それぞれが目指す目的は何か、その手段として何を試みているのか、それによってこの原則ができたのか、といったポイントは聞かれてもサッと出てこなかったりします。それは多分、まだ理解しきれていない部分があるということかなと思います。
今回はより俯瞰的な観点から、それぞれの原則の特徴や立ち位置を分析してみたいと思います。
各技法 Single Responsibility Principle (単一責任の原則) 「これはね、Webも DBも メールも 何でもこなしている便利なサーバーなんだよ。」
「それって下手に触ると全部止まってしまうってことかい?」
SRPはクラスの責務を限定することで、保守の範囲を限定化するための原則です。
SOLID原則 - SRP
Open Closed Principle (開放閉鎖原則) 「このマシンは CPUもメモリもディスクも拡張可能にできているのさ。
それに変更がケースの内側だけなら、ユーザーや外部デバイスも気づかないだろ?」
OCPは クラスの拡張性を最大化し、デグレードのリスクを最小化するための原則です。
Liskov Substitution Principle (リスコフの置換原則) 「こちらが私の業務を引き継ぐ方です。
皆さんからの指示は従来どおりで大丈夫です。もちろん同じ結果も保証しますよ。」
LSPは 継承したクラスに対し互換性を保証させるための原則です。
Interface Segregation Principle (インターフェイス分離の原則) 「弁護士の資格と医師の資格、一緒にしたら便利な資格にならないか?」
「おいおい、取得する側の立場にもなってみろよ」
ISPは インターフェイスを適切に分離し実現の負荷を最小化する原則です。
Dependency Injection Principle (依存性逆転の原則) 「明日の会議には翻訳担当と議事担当が必要なんだが、誰に頼めばいい?」
「心配しなくても誰かを着席して待たせておきますから、本業に集中して大丈夫ですよ」
DIPは インターフェイス間の結合を完全に疎にするための原則です。
一覧 実際に一覧にしてみましたが、改めて見るとそれなりに情報量があります。一気に理解しようと思うと厳しいので、徐々に消化してください。
最初に表の項目に関して簡単に説明します。
英名・和名:原則の英名と和名を提示します 原則と実現手段:基本的な原則を太字で記載し、その下に実際にどう実現するかという手法を提示します クラス・継承・I/F:原則を作り込む際に使用する抽象度を(具象クラス・継承関係・I/F実現)の3種に分類して提示します 縦軸の作り込み・横軸の作り込み:原則を作り込む箇所を縦軸(クラスの継承関係)と横軸(クラスの利用関係)で提示します 縦軸の効果・横軸の効果:原則の効果を縦軸(クラスの継承関係)と横軸(クラスの利用関係)で提示します 最終目的:技法は手段ですが その目的は何なのかを改めて振り返ります # 英名 和名 原則と実現手段 具象 継承 実現(I/F) 縦軸の作り込み 横軸の作り込み 縦軸の効果 横軸の効果 最終目的 1 Single