私はDDDの原則を使用してアプリケーションを作成しています。できる限りすべてを考えた後、私はバウンドコンテキストの作成を開始します。最終的な構造はまだ設定していませんが、現時点では、アプリケーションは次の制限されたコンテキストで構成されています。
- 従業員の管理
- 購入
- 記録
- 報告
これをできるだけプラグインできるようにしたいので、たとえば、別々に開発して保守することができます。おそらく、それらはWCFまたはWebAPIのいずれかを公開してそれらと対話します。
単純なCQRSパターンのUdiDahans実装を使用します。これは高度なコラボレーションアプリではないため(ユーザー数が1000人未満で、同じ小さなデータセットを編集する可能性が低いため)、イベントソーシングやメッセージバスなどを使いたくありません。不必要な複雑さをたくさん追加します。
だから質問に:
従業員と部門のエンティティはすべてのBCに共通ですが、それをどのようにモデル化するのですか?
部門は組織構造の一部であるため、従業員管理BCでは、従業員は部門で作業し、部門を管理でき、これまでに取り組んだ部門の履歴があります。
購買では、BC商品は部門から購入され、部門に配送されます。サプライヤーは、部門ごとに異なる契約を結んでいます。
アーカイブでは、一部の情報がアーカイブされ、部門に関連付けられます。
同じことが従業員にも当てはまります。
制限されたコンテキストからデータを永続化する方法は?
それらは同じデータベースにマップすることも、それぞれに独自のデータベースを持たせることもできます。
私がこれまでにしたいくつかの考え
モデル化の方法
「会社」または「組織」と呼ばれるもう1つのBCを作成し、そこで部門を管理する必要がありますか?
上記のUdiDahansの記事に従って、各BCの部門エンティティと従業員エンティティを、そのBCに必要なフィールドと動作だけで作成する必要があります。これは理にかなっているように聞こえますが、実際にこれをどのように使用するかを考えているので、理解できません。他の場所で管理されている部門にアクセスする必要がありますが、BCを混在させずに、これをどのように正確に行うのですか?
使い方?
クエリを実行して、どこかから部門のリストを取得したとします。UIには、購入したい部門のリストも表示されます。これはこの部門の最初の購入であるため、購買BCはこの部門についてまだ知りません...したがって、購買BCの部門オブジェクトは、他のBCから維持されたデータで満たされます-では、これをどのように保持しますか?配送先住所や請求書住所などの情報が存在しない場合は、追加する必要がありますか?
次に、「部門UIの登録」で、すべてのBCで「RegisterDepartment」サービスを呼び出し、UI(MVCコントローラー)を介して行われたすべての変更と同期していることを確認する必要がありますか?
従業員も同じです。どの従業員が購入したか、アーカイブに何かを入れたか知りたいです。したがって、どういうわけか、これらのBCにも従業員オブジェクトが必要ですが、別のBCからそれらを管理します。
永続
化上記の課題のいくつかは、データベース内の同じテーブルにさまざまな従業員オブジェクトをマッピングすることで解決できます。PurchasingBCとArchiveBCは新しい従業員を登録できませんが、そこにいる従業員に情報を追加し、同じデータベース内の他のオブジェクトに結び付けます。そうすれば、データベースは、すべてのBCがまだ同じ世界に住んでいることを確認します...
アドバイスが必要なので、後で維持するのが非常に難しいものを作ってしまうことはありません。