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" が集計ルートである) は、境界付けられたコンテキストではありませんか?