1

新しいシステムを組み立てており、そのための豊富なドメインが必要です。しかし、私はもっと知りたい細部にこだわっています。

クラス Customer があるとします。実際に顧客エンティティまたは集約ルートを永続化するのはどこですか?

持続性の知識を持つ顧客クラスである必要がありますか?

var myCustomer = CustomerFactory.CreateCustomer(id);
myCustomer.Name = ...
myCustomer.LastName = ...

myCustomer.Save()

この場合、顧客のリポジトリを顧客クラスに渡す必要があります (ファクトリまたはインジェクションを介して)。Eric Evens による DDD の本では、この良い例を見つけることができなかったことに注意してください。

もう 1 つの方法は、永続性について顧客に知られないようにすることです。

var myCustomer = CustomerFactory.CreateCustomer(id);
myCustomer.Name = ...
myCustomer.LastName = ...

CustomerRepository repository = new CustomerRepository();
repository.Save(myCustomer);

また、次のようにすべてをまとめて行うサービスクラスを作成できると思います。

AddCustomerService service = new AddCustomerService(CustomerRepository repository)
service.AddCustomer(myCustomer);

ちょっとしたメモ: 実際に顧客クラスに保存しないと、私の顧客クラスは単なるプロパティであることがわかります。実際の動作はありません。動作は、クライアントが使用するサービス クラスまたはリポジトリに移動されます...

4

2 に答える 2

2

後者が好ましい。つまり、保存メソッドを CustomerRepository クラスに記述します。DDD では、エンティティは永続化ロジックを無視する必要があります。ドメイン エンティティが動作を含まず、プロパティのみを含むことは非常に一般的です (ただし、両方を含む必要がある場合もあります)。

于 2013-07-06T13:42:10.727 に答える