Clean Architecture 読んでて
見え方が中から外になっている構造なのはわかった。
自分がやったプロジェクトでも、最低限、インフラからコントローラ側方面のクラスは参照しないようにしていたなあと。
でも、書いている途中でレイヤーが深くて面倒だなと思ったりもした。
規模や拡張性によって2重の丸が最適のこともあれば、3重、10重の方が最適な場合とかいろいろあるんだろうけど(それがClean Architectureと呼べるのかどうなのかは知らないが)この点はしっくりと理解できた。
ただ、丸の中心部にいるエンティティって何なんだろう。
どうもWebプログラムを書くようになってからデータは一番奥にいてデータベースから取ってきて表示して、エンティティはデータベースと画面の中間にいるようなイメージを持っていたけど、この本を読んでちょっと観方が変わったな。
同じ円の対極から対極であってどっちも外側で、エンティティこそが真ん中なんだなっていうか。
で、ふと思いついたんだけどこれは、たとえば、今連続したシーケンスと思っているメモリアドレスとその中身をエンティティと考えれば、そのメモリがどのように製造されて、ビットをどのような形式で保存しているか(たとえば、メモリがスワップインアウトされるとか、ネットワーク越しにアクセス可能なメモリだとか)そんなことはどうでもいいってことと似ているのかもしれないな。
コントローラの仕事をエンティティからデータを取ってきて表示を担うヤツにデータを渡すことと規定すれば、コントローラがデータベースを意識する必要は無いんだろうね。(まあ、理想的にはそうなんだけどCleanArchitectureを実践しても結局DBをひっくり返されるとプロジェクトコケる確率がかなり高い気がしてるのだけど)
MMUに管理されたメモリみたいに普段そこに無い蜃気楼のような存在だとしても、必要な時にきっちり取り出して格納できるのであれば、それはもう連続したメモリなのだからエンティティもまたそういうもんなんじゃないかと思った。