1

ドメイン駆動設計は、Get メソッドがリポジトリにあり、Add/Del/Update がビジネス オブジェクトにあると言っていると思いましたか?

これを明確にしていただけますか?

MVCMusicStore サンプルを見ると、データベースに対するすべての CRUD メソッドがエンティティに含まれています。

http://mvcmusicstore.codeplex.com/SourceControl/changeset/view/d9f25c5263ed#MvcMusicStore%2fModels%2fShoppingCart.cs

4

3 に答える 3

2

同様の質問に答えたところですが、ドメインモデルはリポジトリを認識できますか?(また、「保存」メソッドはビジネスドメインエンティティに属しますか?)-そして、多くのDDDの質問は、アクティブレコードとリポジトリの選択に関するもののようです。

エリック・エバンスのアドバイスに従います

一般的に、フレームワークと戦わないでください。DDDの基本を維持し、フレームワークが敵対的である場合は詳細を手放す方法を模索します。DDDの概念とフレームワークの概念の間の親和性を探します。これは、フレームワークを使用する以外に選択肢がないことを前提としています。

したがって、DDDの作成者がいくつかの不便を認識している場合でも、私にとってActive RecordとRepositoryのどちらを選択するかは、現在のテクノロジーのスタックによって異なります。

于 2012-08-05T19:11:50.480 に答える
2

あなたが投稿したリンクは、ドメイン駆動設計の例ではなく、MVCパターンを示しているにすぎません。前述のように、エンティティにはすべての永続ロジックが含まれていますが、ビジネスロジックは主にコントローラーにあります。

同じシステムのドメイン駆動設計では、エンティティには永続ロジックは含まれませ、ほとんどのビジネスロジックは含まれます。すべての永続化機能はリポジトリに常駐し、コントローラー(別名サービス)は非常に薄く、ほとんどの作業をエンティティに委任します。

于 2012-08-06T04:41:06.440 に答える
0

典型的なリポジトリは次のようになります。

public class OrderRepository {
    public MyClass Load(Guid id); // throws an exception if not found
    public void Save(Order order);
    public void Delete(Guid id); // does not throw an exception if not found (idempotent)
}
于 2012-08-07T14:01:46.117 に答える