🧅

Clean Architectureを使いたくて「Clean Architecture 達人に学ぶソフトウェアの構造と設計」を読んだ

2023/05/15に公開

前から読みたかった「Clean Architecture 達人に学ぶソフトウェアの構造と設計」を読んだ、というだけの記事です。よくある本の解説とか要点をまとめるようなことはしないです。

https://www.amazon.co.jp/Clean-Architecture-達人に学ぶソフトウェアの構造と設計-Robert-C-Martin/dp/4048930656

経緯

Clean Architectureについての解説記事を読みあさってある程度は理解したつもりでいたのですが、実際にClean Architectureを採用して実装しているリポジトリを参考にしようとコードをいくつか読んでみると、知らない名前のレイヤーが出てきたりしてよくわかりませんでした。
自分としては、まずはClean Architectureの例の図の通りに実装ができるようにしたいと思ったので、一番有名なこの本を読んで理解しようと思いました。

読んでみた結果

知りたかった情報が得られたものもあれば、得られなかったものもありました。

本全体を通して

最初から最後までClean Architectureについて詳しく解説している書籍だと思っていましたが、思っていたような構成ではなかったです。
自分としては、各種レイヤーの説明や実際の実装方法についての詳しい解説が欲しかったのですが、思ったよりこの辺りの解説は少なかったように思えます。
ちなみにこの本は350ページほどありますが、Clean Architectureについての解説は199ページから始まります。例の図についての解説は思った以上にあっさりとしていて驚きました。

各レイヤーの説明

事前にググってある程度Clean Architectureについて調べていたので理解には困りませんでしたが、もう少し具体的な内容が欲しかったと思います。
他のデザインパターン(アーキテクチャ)の概念をある程度知っていることを前提として解説をしているような印象を受けたので、この本一冊で各種レイヤーの役割を理解するのは難しいんじゃないかなと思いました。

エンティティの扱い方

repositoryで定義している関数の引数や戻り値がエンティティのデータ構造と全く同じようなケースは珍しくないと思います。このような場合に引数や戻り値にエンティティを使っていいのかどうか気になっていたのですが、この本曰く、これはNG行為のようです。
個人的には結構気になっていた内容だったのですが、本にしっかりと書いてあったので、これで自信を持って実装できそうです。

ControllerからUsecaseを経由せずにRepositoryを呼び出す

依存の向きはルール違反していませんが、特殊なケースを除いてNG行為に該当するようです。
実際にプロジェクトで見たことがあるケースで気になっていたのですが、どうもNG行為のようなのでモヤモヤがスッキリしました。

まとめ

せっかく新しく本を読んだので記事を書こうと思いましたが、正直思ったより得られた情報がなかったので書くことがあまりなかったです。
具体的な実装の方法についてほとんど記述がなかったのに、具体的な実装を例にして解説をしている記事は凄いなと思いました。

Discussion