ドメイン駆動開発_フォルダー構成編_#04_ドメイン駆動開発でApplication層は必要?

当サイトではアフィリエイト広告を利用しています。

NDDD

WinFormとInfrastructureの間にApplication層が必要なのでは?とご質問をいただくことがあります。私の提唱する実装パターンではApplication層は「無い」というのが回答になります。

ご指摘の通り,エリックエバンズ等のドメイン駆動開発の書籍の推奨アーキテクチャーにはApplication層があります。UI層とInfrastructure層,Domain層を橋渡しする「薄い層」とされています。ただし,Application層は省略してもよいとも言われています。

私も昔はApplication層を取り入れた実装を実践していましたが,次のような理由から省略しました。これは私の考え方なので,ソフトやチームのよっては必要かもしれません。

Application層は,Infrastructure層やDomain層の呼び出しを中継してまとめたり,取得した値を加工したりするために間に挟む層ですが,Application層があると,処理が冗長になります。要するに,同じような処理が増える傾向にあります。

・ViewModelでInfrastructure層の呼び出しをせず,いったんApplication層を経由する。
・Infrastructure層で値を取得し,Application層を経由する

このようになると,ViewModelでApplication層を呼び,Application層からInfrastructure層を呼ぶことになるのですが,実現できることはViewModelでInfrastructure層を呼ぶ場合と大して変わらず,コード量だけが増えます。取得後の値をApplication層で加工するという面も,本当にビジネスロジックとして共通的な加工が必要ならDomain層で行ったほうがいいと思いますし,画面固有の物ならViewModelで行えばいいと思います。

そのような理由から,Application層があると処理が冗長になり,チームメンバーの「これはどこに書いたらいいですか?」という質問が多く出てきてしまいましたので,Application層を省略しています。

私の結論としてはApplication層なしの今の形が最終形です。ただし,これは私の意見なので,チーム内で話し合い,あったほうが良いと思われたら入れるのもありだと思います。