クリーンアーキテクチャを勉強して思ったこと

アプリケーション設計をする時にDDDを採用して進める場合、Layered ArchitectureやClean Architectureなど色んな実装手法が選択肢として上がってくる。

ちょっと勉強した感じ、これらの基本は各Layerでは呼び出す側のレイヤーしか意識せず呼び出されるものが入ってきたり、直接関係のないレイヤーに関しては徹底的に排除することで疎結合を保つ仕組みになっている。しかし、実装を進めていくと全レイヤーを通してどうしても外部リソースへのアクセス用クラスなどが見え隠れするため若干やりたいことと実装がズレているのではないかとモヤモヤする。

例えば、CSVを取り込んでDBに登録するようなバッチを作るとして、

と書いた時(なんか書き間違いあってコンパイルできないかもしれないけど・・・)、ここでインタラクタに着目するとScalaCSV用とJDBC用のそれぞれの格納クラスを引数に取らないといけないし、メソッドを呼び出す時も呼び出される側でせっかく「implicit句」を入れてくれているのに引数に暗黙的に渡されず一々指定をしなければいかなくてちょっと微妙である。

で、色々と考えたらこうなった

これだと外部リソースをユースケースやドメインサービスは意識しなくていいので、コードがほんの気持ちシンプルになった気がする。EntityIOContextContainerに格納されているものはリポジトリで初めて中から取り出され、目的に沿って適切に利用するようにした。

これだと、実際に外部を意識しているのはリポジトリだけなのでなんかスッキリするしストレージが変わった時にも最小限の変更で良さそうである。

まぁ、とは言っても本格的にこれで実装したことないから正直うまくいくかは謎だけどどこかで試したいね。さて、メモとしてブログに考えを書いたし、そろそろ寝るか。

クリーンアーキテクチャを勉強して思ったこと” への1件のフィードバック

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください