アプリケーションレイヤのモジュール分割
これまで、ドメインモデルのモジュールを見てきましたが、それ以外の要素についても確認してみましょう。DDDでは、ドメインオブジェクトを利用するアプリケーションレイヤ側にも処理を持ちます。ここのモジュール設計も同様で、わかりやすく管理できるように分割します。
これらのモジュールの中には、アプリケーションサービスや、そのサービスで利用するコマンドが格納されています。
SaaSOvation.AgilePM.Application.Teams SaaSOvation.AgilePM.Application.Sprints SaaSOvation.AgilePM.Application.Products
このように「アジャイル管理コンテキスト」では機能ごとに分割していることがわかります。
なお「認証・アクセスコンテキスト」では、以下のようにサブモジュールを作らず、1つのモジュールにてまとめています。
SaaSOvation.IdentityAccess.Application
各プロジェクトの状況に応じて、モジュールを真剣に検討すると良いでしょう。
境界づけられたコンテキストとモジュールの使い分け
なお、モジュールによる分割か、境界づけられたコンテキストによる分割かで悩むことがあるかもしれません。モジュールに関してはこれまで述べてきた通りクラス群でまとめる仕組みですが、境界づけられたコンテキストは、ユビキタス言語の境界線(ビジネス的な境界線)となります。
モデルが大きくなってきた場合、ドメインエキスパートの言葉に従い、どのような方法による分割が最適かを検討していくと良いでしょう。そのため最初の設計時は、無理して分割してしまうのではなく、ひとまとめのままのほうが無難かもしれません。
最後に
以上、本稿ではモジュールについて紹介してきました。DDDにおけるモジュールは、プログラム言語の仕組みだけではなく、主要なモデリングツールであることが理解できたと思います。開発をする時には適切なモジュール名にて責任を明確にして、役割を正しく分離できているかを意識すると良いでしょう。次の第10回ではDDDの「集約」について紹介します。
