18

複数の境界付けられたコンテキストでエンティティがどのように動作するかを理解しようとしています。

会社の従業員を指定します。(たとえば) 人事のコンテキストでは、この人物は名前、姓、住所、給与参照番号、および銀行口座を持っています。しかし、経理のコンテキストでは、関連するのは給与参照番号と銀行口座だけです。

SalariedEmployeeHR コンテキストに Employee エンティティがあり、経理コンテキストにValue-Type (例: ) がありますか?

class Employee
{
    public BankAccount BankAcountDetails { get; set; }
    public string FullName { get; set; }
    public Address ResidentialAddress { get; set; }
    public string SalaryRef { get; set; }
}

SalariedEmployeeクラス (??) : 従業員の値型

class SalariedEmployee
{
    public SalariedEmployee(string salaryRef, BankAccount bankAcountDetails)
    {
        ...
    }

    public string SalaryRef { get; }
    public BankAccount BankAcountDetails { get; }
}

境界付けられたコンテキストの HRService はこの情報を返しますか? それとも、両方のコンテキストで Employee クラスを使用しますか?

4

4 に答える 4

16

http://msdn.microsoft.com/en-us/library/jj554200.aspxから:

境界付けられたコンテキストは、独自のドメイン モデルと独自のユビキタス言語を備えた自律的なコンポーネントです。実行時に相互に依存関係を持つべきではなく、分離して実行できる必要があります。ただし、これらは同じシステム全体の一部であり、相互にデータを交換する必要があります。

境界付けられたコンテキストでCQRS パターンを実装している場合は、このタイプの通信にイベントを使用する必要があります。境界付けられたコンテキストは、境界付けられたコンテキストの外部で発生したイベントに応答できます。また、境界付けられたコンテキストは、他の境界付けられたコンテキストが発行する可能性のあるイベントを発行できます。申し込む。イベント (すでに起こったことに関する情報を公開する一方向の非同期メッセージ) を使用すると、境界付けられたコンテキスト間の疎結合を維持できます。

于 2013-09-10T09:14:38.443 に答える
6

それらが厳密に分離されている場合、私はそれらを厳密に分離します。異なる名前空間にある 2 つの異なるクラス。それぞれに異なる属性があります。

HR が HRM.Employee を作成すると、Accounting が取得して Accounting.Employee を作成するイベントが発生する可能性があります。

于 2012-07-24T12:45:13.143 に答える
2

複数のコンテキストが必要な場合は、いくつかのコンテキストではエンティティとしてモデル化し、別のコンテキストでは値オブジェクトとしてモデル化できます。通常、エンティティから値オブジェクトへの変換は簡単ですが、値オブジェクトからエンティティへの変換はそれほど簡単ではない場合があります。ドメイン駆動設計から、p。337:

変換メカニズムは、モデルによって駆動されません。境界付けられたコンテキストではありません。(これは境界自体の一部であり、コンテキスト マップで説明します。)

人事コンテキストが経理コンテキストに特定の従業員に関する質問をする必要がある場合、それは紛らわしい質問になります。

于 2011-11-23T16:19:09.190 に答える
1

両方のコンテキストで同じエンティティを使用しないと思います。それらは制限されているはずです。1 つのコンテキストのニーズに合わせて従業員クラスを変更する必要がある場合はどうすればよいでしょうか?... 「境界付けられたコンテキストであると想定される」は、もはや境界付けられていません。

値オブジェクトを使用します。コツは、値オブジェクトを適切に定義することです。整数は整数であるように、それらは「データ型」オブジェクトと同等です。もちろん、これは挑戦的です(int16、int32 ...)。しかし、それが事実であると仮定しましょう。従業員は値オブジェクトの適切な候補ですか?....私はそうは思いません:(...境界のあるコンテキストでは、従業員に同じ情報セットは必要ないかもしれません。別の名前では、従業員の識別情報はより良い候補 (ファーストネーム、ラストネーム、ミドルネーム...) これは、限定されたコンテキストで再利用できます。

サービスレイヤーはこの値オブジェクトを返す必要がありますか?...個人的にはそうしません。この再利用性をリポジトリで定義したいと思います。Nhibernate でマッピングを共有するか、同じプロジェクション/マッパー クラスを共有します。

お役に立てれば :)

于 2011-11-24T10:07:01.630 に答える