天使の取り分

ソフトウェア開発に関するよもやま

Clean Architectureを読む(6)

9章 LSP : THE LISKOV SUBSTITUTION PRINCIPLE

リスコフの置換原則に関して。 インタフェースに対して依存することで、実装が置換可能となります。
Javaのような静的型付け言語のインタフェースに限らず、Rubyのような動的型付け言語におけるシグネチャベースのインタフェース(ダックタイピング)も含め、重要な原則となります。

10章 ISP : THE INTERFACE SEGREGATION PRINCIPLE

インタフェース分離原則は、大きなインタフェースを作るのではなく、適切なサイズのインタフェースに分離せよというものです。

11章 DIP : THE DEPENDENCY INVERSION PRINCIPLE

変わりやすい具象に依存させてはならず、安定した抽象に依存せよという原則です。要はインタフェースに対してプログラミングせよということですね。
依存の反転とは何を指しているかというと、実行時の制御フローの流れと、ソースコードの依存の方向が反対となるということです。

続いて12章からは PART IV COMPONENT PRINCIPLES に入ります。コンポーネントレベルの原則についてですが、そもそもコンポーネントとは何か、どのような要素から成り立ち、どのようにシステムを構成するべきかについて書かれています。

12章 COMPONENTS

ここで著者は、コンポーネントとはデプロイ単位であると主張します。例えばJAR、DLL、ファイルなどです。
コンピュータの大幅な性能向上により、実行時に動的にライブラリをリンクすることが可能となったことは、ソフトウェアシステムにプラガビリティをもたらしました。 プラグイン・アーキテクチャ は本書における重要な主題のひとつとなります。

13章 COMPONENT COHESION

この章ではコンポーネント設計に関する3つの原則が述べられています。

REP : THE REUSE/RELEASE EQUIVALENCE PRINCIPLE

再利用の単位=リリースの単位となるようにする。

CCP : THE COMMON CLOSURE PRINCIPLE

同じ理由で変更する(可能性のある)クラス群をコンポーネントにまとめる。(SRPのコンポーネント版)

CRP : THE COMMON REUSE PRINCIPLE

一緒に再利用するクラス群を同一のコンポーネントにする。逆に、関係がないものを同じコンポーネントに含めない。

これらの3つの原則は互いに相反する部分もあるため、バランスを取らねばならないと著者は述べています。

今日はここまで。