メインコンテンツまでスキップ

「solid」タグのついた9記事

全てのタグを見る

SOLID は 1 つの理論ではない — 5 原則の出自

SOLID の 5 原則は同時に生まれたものではありません。Martin が 2000 年に公開した原典を読むと、そこにあるのはクラス設計の 4 原則とパッケージ設計の 6 原則で、SRP は含まれていません。頭字語が何を隠したかを扱います。

SOLID 原則

オブジェクト指向設計の SOLID 5 原則 (単一責任 / 開放閉鎖 / リスコフ置換 / インターフェース分離 / 依存逆転) を TypeScript の実例で解説。各原則の Bad / Good 比較で理解を深める入門ガイド。

SOLID 原則の深掘り

SOLID 5 原則を「なぜ守るのか」「いつ破っていいのか」「どう誤用されるか」の 3 層で掘り下げる全 7 章の連載。各原則の原典にあたり、現在どう再評価されているかまで扱います。

リスコフの置換原則 — 型が通っても契約は守られない

LSP は「派生型は基底型と置き換えられる」という原則ですが、置き換えられるかを判定する基準は契約にあります。原典が示した事前条件・事後条件・不変条件・履歴性質の 4 項目と、型検査がそのどこまでを見ているかを扱います。

依存性逆転の原則 — 抽象は誰のものか

DIP と DI と IoC は別の概念です。依存を外から渡すだけでは逆転は起きません。何が逆転するのか、抽象がどちらのモジュールに属するべきかを原典から確認します。

単一責任の原則 — 「変更の理由」とは誰のことか

SRP の「変更する理由は 1 つ」という定義は主観的で、読む人ごとに分割の粒度が変わります。Martin 自身が後に「この原則は人についてのものだ」と明示した意味と、分割しすぎたときに何を失うかを扱います。

原則の衝突と限界 — どちらを取るかを決める

5 原則は互いに引っ張り合います。分割を進めれば変更で触るファイルが増え、抽象を挟めば実体を追う手数が増えます。衝突したときの判断と、SOLID そのものへの現代的な批判を扱います。

開放閉鎖の原則 — 予測が外れたときのコスト

OCP は拡張点をあらかじめ用意することを求めますが、拡張の方向を読み違えると間違った抽象が残ります。原典が何を実現手段としたかを確認し、YAGNI との衝突をどう判断するかを扱います。