クリーンアーキテクチャ19章の問に答える

設計とかRailsの記事このブログなんもないことに気づいた。
最近クリーンアーキテクチャを社内で読書会を主催して読み進めてます。

一人だと挫折したり難しい表現があったりするので色んな人と読書会できて助かっています。
この本の19章の最後の問がソフトウエアアーキテクチャの原則をまとめるのに良い機会だったのでまとめてみますた。

クリーンアーキテクチャの19章では以下のようなアーキテクチャが示されます。暗号化プログラム作成が目的です。
19章の最後の「原則がどこで使われているのか、どうして使われているのかを確認してほしい」という問が記事の主題です。 f:id:sasa5740:20200601233305p:plain

返答

SRP(単一責任)、CCP(閉鎖性共通の原則)

変更理由が違うものを別のコンポーネントやモジュールにわける。入力クラスのConsoleReaderの変更理由とロジックの核であるEncryptの変更理由は明確にことなる。なので別モジュールになっているのである。

OCP(オープンアンドクローズドの原則)

依存が一方向で統一されているためConsoleReaderの変更はEncryptにはなんの影響もなく変更が容易

DIP(依存関係逆転)

変化しやすいConsoleReaderを参照したり継承はしない。変更されやすいものに依存してしまうとインターフェイスを安定したものにできない。

SDP(安定依存の原則)

安定度が高いEncryptに依存していること。安定度が低いものに依存すると安定度が低いモジュールやコンポーネントが変更しにくくなってしまう。

SAP(安定度・抽象度等価)

Encryptは抽象的であるべき、なぜなら複数のモジュールから依存されていて安定度が高いから。逆にConsoleReaderは具象であるべき。依存されていないので抽象的にするのが無駄だから。

まとめ

共通言語と理由を客観的に説明できるか?が設計における壁だと思うのでやっていきである。