yotiky Tech Blog

とあるエンジニアの備忘録

Clean Architecture 達人に学ぶソフトウェアの構造と設計 第III部

Clean Architecture 達人に学ぶソフトウェアの構造と設計」を読んだのでそのまとめです。

www.amazon.co.jp

第III部 設計の原則

よくできたソフトウェアシステムはクリーンなコードを書くことから始まる

SOLID原則の目的は、変更に強く、理解しやすく、コンポーネントの基盤として広く利用できることである

第7章 SRP:単一責任の原則

「ひとつの関数はひとつのことだけ行うべき」は誤解である

モジュール(ソースファイル)はたったひとつのアクターに対して責務を負うべきである

SRPはコードレベルの原則だが、同じような原則はコンポーネントレベル(CCP)やアーキテクチャレベル(境界を作るための「変更の軸」)として登場する

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

ソフトウェアの構成要素は拡張に対して開き、修正に対して閉じていなければならない

ソフトウェアの振る舞いは、既存の成果物を変更せずに拡張できるようにすべきである

コンポーネントレベルではより重要になる

コンポーネントを分割して、依存関係を階層構造にし、上位レベルのコンポーネントが下位レベルのコンポーネントから影響を受けないようにする

第9章 LSP:リスコフの置換原則

交換可能なパーツとして構築するなら、個々のパーツが交換可能となるような契約に従わなければならない

これに違反すると特別なコードを埋め込み複雑で特別な仕組みだらけになる

アーキテクチャレベルにも適用すべき原則である

第10章 ISPインターフェイス分離の原則

使っていないものへの依存は回避すべきである

使っていないモジュールに依存した場合、本来不要なはずのコンパイルやデプロイにも影響を与える

第11章 DIP:依存関係逆転の原則

上位レベルの方針のコードは下位レベルの詳細のコードに依存すべきではなく、逆に詳細側が方針に依存すべきである

ソースコードの依存関係が抽象だけを参照しているもの、それが最も柔軟なシステム

インターフェイスは実装よりも変化しにくい安定した抽象である

具象オブジェクトはどこかで生成しなければならず、その際にAbstract Factoryパターンを使って依存性を管理する

抽象コンポーネントには上位レベルのビジネスルールが含まれる

具象コンポーネントにはビジネスルールが操作する実装の詳細が含まれる