「Clean Architecture 達人に学ぶソフトウェアの構造と設計」を読んだのでそのまとめです。
第IV部 コンポーネントの原則
第12章 コンポーネント
コンポーネントとはデプロイ単位のこと(jar, gem, dllなど)
よくできたコンポーネントは個別にデプロイできる状態を保っているため、個別に開発を進められる
第13章 コンポーネントの凝集性
再利用・リリース等価の原則(REP)
コンポーネントは一貫するテーマや目的があり、それを共有するモジュールを集めなければならない
コンポーネントを形成するクラスやモジュールは、まとめてリリース可能でなければならない
閉鎖性共通の原則(CCP)
同じ理由、同じタイミングで変更されるクラスをコンポーネントにまとめること
単一責任の原則(SRP)をコンポーネント向けに言い換えたもの
オープン・クローズドの原則(OCP)とも密接に関連している
全再利用の原則(CRP)
コンポーネントのユーザーに対して、実際には使わないものへの依存を強要してはならない
ひとつのコンポーネントにまとめるクラスはどれも切り離せないものばかりにしておきたい
再利用・リリース等価の原則(REP)と閉鎖性共通の原則(CCP)は包含関係にあり、ひとつのコンポーネントを大きくする方向に働く
全再利用の原則(CRP)はこれらと相反する原則で、ひとつのコンポーネントを小さくする方向に働く
優れたアーキテクトは、これら3つの原則でチームの現在の懸念事項に見合った落とし所を見つける
これは簡単なことではない
最適な落とし所は常に変わり続け、コンポーネントの構成も変わっていく
第14章 コンポーネントの結合
非循環依存の原則(ADP)
コンポーネントに循環依存があってはならない
循環依存は、依存関係逆転の原則(DIP)や新たにコンポーネントを作ってそこに依存するなどで解消できる
コンポーネント構造は要件の変更に伴って変化するので、依存構造を常に注視しておく必要がある
安定依存の原則(SDP)
安定度の高い方向に依存すること
変動を想定したコンポーネントは、変更しづらいコンポーネントから依存されるとすぐに変更しづらくなる
ソフトウェアを変更しづらくするには、より多く依存されるようにする
多く依存されたコンポーネントは安定している
逆に多くのコンポーネントに依存しているものは、外部要因に変更の可能性が高くなり不安定になる
安定度・抽象度等価の原則(SAP)
安定度の高いコンポーネントは抽象度も高くあるべきで、安定度の高さが拡張の妨げになってはいけない、一方安定度の低いコンポーネントは具体的なものであるべき