前回「階層アーキテクチャの利点は複雑さの減少」は階層化アーキテクチャの考え方について説明してきました。今回は、階層化アーキテクチャにおけるサービス層と、設計が難しいとされるドメイン層についてどのように考えるのかを見ていきます。まず、最初に各層を設計するときに、拡張性・保守性を高めるために何を検討すべきかを考えてみましょう。 (1)業務機能とシステム機能の分離 業務要件を満たすためのビジネスロジックなどを実現する機能とトランザクション制御などシステムを実現するために必要なシステム機能は、別々に実装できるように考えます。ビジネスロジックを実装するコードにトランザクション制御を行うコードが混在することは、拡張性・保守性を著しく悪くします。 (2)層間の依存性の排除 ドメイン層などの階層化アーキテクチャの各層は、基本的に下位層に存在するコンポーネントをブラックボックスとして扱えるように設計します。
![ドメイン層に最適なアーキテクチャを考える](https://cdn-ak-scissors.b.st-hatena.com/image/square/cff8d14109cfbff60fd16f084a261b7ad1be9e4e/height=288;version=1;width=512/https%3A%2F%2Fimage.itmedia.co.jp%2Fim%2Farticles%2F0702%2F21%2Fr5extend08_01.gif)