SOLID は 1 つの理論ではない — 5 原則の出自
SOLID の 5 原則は同時に生まれたものではありません。Martin が 2000 年に公開した原典を読むと、そこにあるのはクラス設計の 4 原則とパッケージ設計の 6 原則で、SRP は含まれていません。頭字語が何を隠したかを扱います。
SOLID の 5 原則は同時に生まれたものではありません。Martin が 2000 年に公開した原典を読むと、そこにあるのはクラス設計の 4 原則とパッケージ設計の 6 原則で、SRP は含まれていません。頭字語が何を隠したかを扱います。
オブジェクト指向設計の SOLID 5 原則 (単一責任 / 開放閉鎖 / リスコフ置換 / インターフェース分離 / 依存逆転) を TypeScript の実例で解説。各原則の Bad / Good 比較で理解を深める入門ガイド。
SOLID 5 原則を「なぜ守るのか」「いつ破っていいのか」「どう誤用されるか」の 3 層で掘り下げる全 7 章の連載。各原則の原典にあたり、現在どう再評価されているかまで扱います。
ISP には再コンパイルを避ける動機と設計上の動機の 2 つがあり、前者は TypeScript にそのままの形では存在しません。構造的型システムではインターフェースを切らずに ISP を満たせます。
LSP は「派生型は基底型と置き換えられる」という原則ですが、置き換えられるかを判定する基準は契約にあります。原典が示した事前条件・事後条件・不変条件・履歴性質の 4 項目と、型検査がそのどこまでを見ているかを扱います。
DIP と DI と IoC は別の概念です。依存を外から渡すだけでは逆転は起きません。何が逆転するのか、抽象がどちらのモジュールに属するべきかを原典から確認します。
SRP の「変更する理由は 1 つ」という定義は主観的で、読む人ごとに分割の粒度が変わります。Martin 自身が後に「この原則は人についてのものだ」と明示した意味と、分割しすぎたときに何を失うかを扱います。
5 原則は互いに引っ張り合います。分割を進めれば変更で触るファイルが増え、抽象を挟めば実体を追う手数が増えます。衝突したときの判断と、SOLID そのものへの現代的な批判を扱います。
OCP は拡張点をあらかじめ用意することを求めますが、拡張の方向を読み違えると間違った抽象が残ります。原典が何を実現手段としたかを確認し、YAGNI との衝突をどう判断するかを扱います。