2

私はこのようなもののいくつかに頭を包むのに本当に苦労しています。私が苦労している例を挙げましょう。

アプリの DAL として Linq-2-Sql を使用し、Rob Conery の MVC Storefront サンプル アプリで使用される IRepository パターンを使用しています。

私のドメインには、住所モデルのコレクションを持つ顧客モデルがあります。私の UI には、ユーザーが顧客に新しい住所を追加できるボタンがあります。これにより、住所エディターが開き、すべての情報を入力できます。

次は何が起こる?住所はデータベースに保存され、顧客オブジェクトのリストに追加されますか? リストに追加されるだけで、Customer オブジェクトが保存されるまで更新されませんか? ユーザーがアドレスを削除したい場合はどうすればよいですか? データベース内のアドレスを削除してから、リストから削除しますか? それとも、必要なすべての削除/追加を行うだけで、毎回データベースからすべてをダンプし、Customer.Addresses コレクションにあるもので更新しますか? ここで正しい流れは何ですか?

アドレスのコレクションは、次のような呼び出しによってリポジトリ経由でのみ更新される必要があります。

public void AddAddressToCustomer(Customer c, Address a)
{
    //validate and save address to db
    //add the newly saved address to the Customer Object
}

ヘルプ...

4

3 に答える 3

3

DDD は私が非常に興味を持っている分野ですが、経験はほとんどないため、私の提案は慎重に扱ってください。他のより権威のある回答がないため、私はそれらを提供するだけです.

Eric Evans による「」では、エンティティとしてではなく、通常は値オブジェクトとして扱われるべきものの例として、アドレスが示されています。したがって、Add メソッドは Customer に属していると思います。

customer.Add(アドレス);

顧客リポジトリがあります (ただし、アドレス用のものはありません)。これは次のように使用できます。

customerRepository.Update(顧客);

これの意図的な影響は、これが DB 層でどのように実装されるかについて尋ねるすべての難しい質問が、ドメイン オブジェクト (つまり、顧客オブジェクト) の関心事ではないということです。私もその点を超えて助けることができないのではないかと心配しています。

于 2009-01-29T17:31:46.090 に答える
1

ドメインのコンテキストを十分に理解していないようです。さらに質問をして、より良いユーザー ストーリーを手に入れましょう。シナリオの内容によっては、提案されたシナリオのいずれかがビジネス ニーズを満たす可能性があります。その必要性を理解していただければ、この問題は解決されると思います。

于 2009-01-29T21:56:01.330 に答える