読書ノート『Clean Architecture』その2
前回の続き。
II部までは全ての粒度で適用できる普遍的な話をしていたが、ここから領域別に話が展開していく。
Ⅲ〜Ⅴ部で順に モジュール<コンポーネント<アーキテクチャ と説明する構造のスケールが拡大していく。
第Ⅲ部:設計の原則
モジュール設計レベルの話で、本書では一番小さい粒度の構造設計の話になる。
モジュールの定義ってなんだという話になるのだが、本書ではクラスや関数のある程度凝集性を持った集合のことを指していて、クラス自体の設計もここに入ってくる。
建築で言うとレンガを積み上げて部屋を作ることに例えられる。
以下の性質を満たす構造を作る。
・変更に強いこと
・理解しやすいこと
・コンポーネント基盤として、多くのソフトウェアシステムで利用できること
以下の5つの原則(頭文字をとってSOLIDの原則)が説明される。
・単一責任の原則(SRP):モジュール境界の指針
・オープン・クローズドの原則(OCP):依存関係の指針
・リスコフの置換原則(LSP):抽象具体関係の指針
・インターフェイス分離の原則(ISP):インターフェイス分離の指針
・依存関係逆転の原則(DIP):依存関係の指針
個別の詳細な説明はググった方がよいので割愛。
具体例を使って説明されているが、この部と次の部はとても短い。
説明もおさらいといった感じで非常にあっさりしている。
アーキテクチャの本なので多分あまり関心が無いのだろう・・・。
第Ⅳ部:コンポーネントの原則
コンポーネント設計レベルの話。
本書で言うコンポーネントとはデプロイ単位と説明される。
近年はパッケージ管理システムが発達しているのが、それのパッケージとだいたい同じ。
建築でいうと部屋を組み合わせて建物を作ることに例えられる。
コンポーネント境界を定める凝集性の話と、コンポーネント間の結合関係に言及している。
まず凝集性の関して、以下の3つの原則がある。
・再利用・リリース等価の原則(REP):リリース単位で分ける
・閉鎖性共通の原則(CCP):変更タイミングが同じもので分ける
・全再利用の原則(CRP):ユーザの使う単位で分ける
これらは互いにトレードオフなのでいい感じのバランスで分ける。
次に結合関係に関して、以下の3つの原則がある。
非循環依存関係の原則(ADP)
安定依存の原則(SDP)
安定度・抽象度等価の原則(SAP)
非循環依存関係の原則は循環依存関係を排除するとコンポーネントの上位下位が定義できるからリリースしやすいよという話で、後の2つは安定度と抽象度に関する話。
安定度は変化しにくさの指標で、本書では以下の計算式を参考指標としている。
FanIn: このコンポーネントに依存する外部コンポーネント数
FanOut: このコンポーネントが依存する外部コンポーネント数
Instability(不安定さ) = FanOut / (FanIn + FanOut)
抽象度は本書では以下の計算式を参考指標としている。
Nc: コンポーネント内のクラスの総数
Na: コンポーネント内の抽象クラスとインターフェイスの総数
A = Na / Nc
安定依存の原則はコンポーネント間の依存関係はより不安定な方から安定してる方へ依存することを説いている。
安定度・抽象度等価の原則は抽象度と安定度は同じくらいにすべきという抽象化の指針について説いている。
まとめ
第Ⅴ部から急に章が増えるので、一旦ここで切る。(まだ読み終えてない)
ここまでは下位レベルの依存関係や凝集度のおさらいといったところ。
本書で本当に述べたいのはアーキテクチャレベルの話なので、ここからが本題。
この記事が参加している募集
この記事が気に入ったらサポートをしてみませんか?