3

私は、DDD と境界コンテキストの使用にどのようにアプローチするかを理解しようとしています。

私の質問を説明するために、例を考え出そうとしました。(迅速にするために貧血クラスを使用しています)。

私は、異なる境界付けられたコンテキスト内でドメイン オブジェクトを分離する方法を計画しようとしています。

従業員になり得るドメイン オブジェクトについて考えました。

人事部と財務部という 2 つの境界付けられたコンテキストがあるとします。

一般に、財務部門は、人事部門よりも従業員に関するより多くの情報を必要とします。人事部は、従業員の銀行の詳細、国民保険番号、または契約時間に関する情報を必要としません。(一部のビジネスでは、これは完全に真実ではないかもしれませんが、例ではこれを想定してみましょう)。

したがって、2 つの異なるコンテキストでは、従業員に必要な動作/相互作用が異なります。

人事部門。

public class Employee
    {
        public int Id { get; set; }
        public Title Title { get; set; }
        public string Forename { get; set; }
        public string Surname { get; set; }
        public Address Address { get; set; }
        public DateTime DateOfBrith { get; set; }
        public DateTime EmploymentStartDate { get; set; }

    }

財務部。

public class Employee
    {
        public int Id { get; set; }
        public Title Title { get; set; }
        public string Forename { get; set; }
        public string Surname { get; set; }
        public Address Address { get; set; }
        public DateTime DateOfBrith { get; set; }
        public string NationalInsuranceNumber { get; set; }
        public BankAccount BankAccountDetails { get; set; }
        public double ContractedHours { get; set; }
}

この例では、HR コンテキストの Employee オブジェクトを制限して、必要な動作のみを行い、Finance コンテキストには拡張動作を持たせるにはどうすればよいでしょうか。

アプリケーションが複数のコンテキストに分割され、そのすべてが Employee に関連付けられたカスタム動作を持っている場合、Employee オブジェクトをどのようにモデル化すればよいでしょうか。

コンテキスト マップを作成するさまざまな方法を調べましたが、共有カーネルが有望に思えますが、それはすべてのコンテキストが Employee Domain オブジェクトに関連付けられたすべての動作を共有することを意味します。

それぞれの文脈は限られていると思います。

ヘルプ!

4

2 に答える 2

2

各 BC は独自のモデルを定義します。通常、従業員は 1 つの BC でのみ完全に定義された概念です。他の BC には独自の定義があり、ほとんどの場合、ID になります (GUID にします)。あなたの例では、従業員は HR でのみ完全なエンティティとして存在するのが理にかなっています。財務の場合、財務の観点から意味のある ID とフィールドがあります。モデルは異なる目的を果たすため、重複はありません (単語を形成するためにアルファベット文字を繰り返すと考えてください。すべての単語は、これらの繰り返される文字の組み合わせですが、異なる概念を表します)。

BC は独立したコンポーネント (プロジェクト、アプリ) と考えてください。いくつかのフィールドがあるからといって、それらのフィールドを使用する可能性のあるすべてのアプリでそのオブジェクトを再利用する必要があるというわけではありません。モデルを制限し、互いに独立させます。やがて、それらはさまざまな方法で進化する可能性があります。

また、財務部門が本当に従業員の住所、役職、姓/名を必要としているかどうかを自問してください。ユースケースは、本当に必要なデータを教えてくれます。コンセプト名から始めて、ユース ケースをモデル化します。これが、関連するプロパティと動作を見つける方法です。YAGNI を思い出してください。ユースケースがない場合、オブジェクト/フィールドはありません:D

于 2014-11-10T17:18:25.083 に答える