4

DDD を使用するプロジェクトに取り組んでいますが、ルックアップ エンティティの処理方法に行き詰まっています。たとえば、「Customer」という集約があり、エンティティ「Customer」も集約ルートです。エンティティ「Customer」にはプロパティ「CustomerTypeID」があります。

ただし、既存のすべての顧客タイプ (ID と説明) を表すエンティティ "CustomerType" もあります。ユーザーが顧客タイプを維持できるようにする管理機能があります (つまり、新しい顧客タイプを追加するなど)。

特定の顧客の顧客タイプを変更することについて話しているのではなく、顧客タイプのリストを維持することについて話していることに注意してください。

長々とした話で恐縮ですが、質問させてください。

  • 「CustomerType」は値オブジェクトではなくエンティティであると考えるのは正しいですか?

  • 「CustomerType」は集約「Customer」内にある必要がありますか?それとも、特定の顧客のコンテキスト外でアクセスして維持するため、独自の集約内にある必要がありますか?

  • このエンティティと、基本的なルックアップ エンティティ (顧客ステータス、製品タイプなど) であるその他のエンティティが、それ自体で集計されるべきである (およびこれらの集計の集計ルートである) 場合、何百ものリポジトリになることはありません。 ? (各集約ルートには独自のリポジトリがあるため)

ご覧のとおり、私はここで混乱しているので、正しい方向に向ける必要があります。

================================= eulerfx の返信に返信するコードを書き込もうとしましたが、できませんでした'動かないのでここに置いておきます。

ポイント 2 に関しては、画面上では明らかにタイプの説明 (「個人」など) のみを表示します。それは私がこのようなものになってしまうことを意味しますか?:

Public Class Customer
    Inherits EntityBase(Of Integer)
    Implements IAggregateRoot

    Public Property CustomerID As Integer
    ...
    Public Property CustomerType As CustomerType
    ...

Public Class CustomerType Inherits EntityBase(Of Integer) Implements IAggregateRoot

    Public Property CustomerTypeID As Integer
    Public Property CustomerTypeDescription As String

または、クラス「Customer」内のプロパティを CustomerTypeID にする必要がありますか?

ポイント 3 に関して、集約コンテキストと境界コンテキストの違いは何ですか? Customer のコンテキスト内にのみ存在するエンティティと値オブジェクトも含む "Customer" 集計 ("Customer" が集計ルートである) は、境界付けられたコンテキストではありませんか?

4

1 に答える 1

5
  1. はい、CustomerTypeID と関連付けられた説明があるため、エンティティです。

  2. CustomerクラスにCustomerTypeプロパティまたはプロパティがあるかどうかは、CustomerTypeId上の他のプロパティにアクセスする必要があるかどうかによって異なりますCustomerType。いずれにせよCustomerType、独自のリポジトリを持つ独自のエンティティです。

  3. 特に指定したタイプのエンティティが数百ある場合は、プロジェクトが大きくなりすぎていることを示している可能性があり、適切な境界コンテキストに分割する必要がある場合があります。

于 2011-12-07T00:35:42.737 に答える