§8 OCP: オープン・クローズドの原則
- 1988年 Bertrand Meyer
- ソフトウェアの構成要素は拡張に対しては開いていて、修正に対しては閉じていなければならない(『アジャイルソフトウェア開発の奥義』)
- = ソフトウェアの振る舞いは既存の成果物を変更せずに拡張できるようにすべき
- ソフトウェアよりコンポーネントレベルで重大なインパクトを持つ
- 例
- よくある
Controller
/Service
/Model
/View
/Infra
のコンポーネント図
- 矢印のしっぽ側のコンポーネントが矢印の向かってる先のコンポーネントを参照(
import
)している
View
(ThymeleafView
)を変更した際に、 Controller
を変更しなくて良い
- 他のすべてを変更しても
Model
(BusinessModel
)を変更しなくて良い
Model
が上位のレベルのコンポーネント
- レベル概念に基づいた変更からの保護階層ができていることが OCP
- 依存関係逆転の法則を使って、矢印の方向を制御する