「Clean Architecture」という言葉だけを見ると、レイヤードアーキテクチャ、ヘキサゴナルアーキテクチャ、オニオンアーキテクチャに続く新種のアーキテクチャかと思ってしまいがち。でも、そういう話ではなかった。
よく見るあの同心円の図(エンティティが中心にあって、ユースケース、コントローラーやプレゼンター、DBやUIやWebと層が外に向かって広がっていくあれ)は、クリーンアーキテクチャの唯一の形というわけではなかった。ただの一例。むしろ、その図だけが独り歩きしてしまっているな。
読んで意外だったのは、SOLID原則にけっこうなページ数が割かれていたこと。もちろん名前くらいは知っているし、それっぽいことをやってきたつもり。でも、改めて体系的に読んだのは初めてだった。
読み進めるうちに、自分がやってきた設計の方向性が大きく間違っていなかったと再確認できた。依存性の方向は上位レベルの方針に向かわせていたし、データベースやGUIといった「詳細」には、エンティティやユースケースといった「方針」から依存させないようにしていた。依存性逆転の実践。
ユニットテストのしやすさを考えて境界を明確に分ける設計もしている。ただ、データベースやGUIを完全にプラグイン化して差し替えられるような構成まではいってない。そこまでいったらやり過ぎかと。
C# で開発していることもあって、プロジェクト構成は自然とレイヤーごとに分けている。将来的にモジュール単位で独立させられるようなモジュラーモノリスを見据えて。C# はこのあたりの構成が比較的やりやすい。
設計の原則に忠実に進めていくと、自然とたどり着く形があの同心円に近い構成になるんだと思う。