mike-neckのブログ

Java or Groovy or Swift or Golang

クリーンアーキテクチャーの読書メモ(7)

§8 OCP: オープン・クローズドの原則

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

f:id:mike_neck:20190320020600p:plain
矢印がすべて向かってくる BusinessModel コンポーネントが最上位レベルのコンポーネント