ドメイン駆動設計は、Get メソッドがリポジトリにあり、Add/Del/Update がビジネス オブジェクトにあると言っていると思いましたか?
これを明確にしていただけますか?
MVCMusicStore サンプルを見ると、データベースに対するすべての CRUD メソッドがエンティティに含まれています。
ドメイン駆動設計は、Get メソッドがリポジトリにあり、Add/Del/Update がビジネス オブジェクトにあると言っていると思いましたか?
これを明確にしていただけますか?
MVCMusicStore サンプルを見ると、データベースに対するすべての CRUD メソッドがエンティティに含まれています。
同様の質問に答えたところですが、ドメインモデルはリポジトリを認識できますか?(また、「保存」メソッドはビジネスドメインエンティティに属しますか?)-そして、多くのDDDの質問は、アクティブレコードとリポジトリの選択に関するもののようです。
エリック・エバンスのアドバイスに従います
一般的に、フレームワークと戦わないでください。DDDの基本を維持し、フレームワークが敵対的である場合は詳細を手放す方法を模索します。DDDの概念とフレームワークの概念の間の親和性を探します。これは、フレームワークを使用する以外に選択肢がないことを前提としています。
したがって、DDDの作成者がいくつかの不便を認識している場合でも、私にとってActive RecordとRepositoryのどちらを選択するかは、現在のテクノロジーのスタックによって異なります。
あなたが投稿したリンクは、ドメイン駆動設計の例ではなく、MVCパターンを示しているにすぎません。前述のように、エンティティにはすべての永続ロジックが含まれていますが、ビジネスロジックは主にコントローラーにあります。
同じシステムのドメイン駆動設計では、エンティティには永続ロジックは含まれませんが、ほとんどのビジネスロジックは含まれます。すべての永続化機能はリポジトリに常駐し、コントローラー(別名サービス)は非常に薄く、ほとんどの作業をエンティティに委任します。
典型的なリポジトリは次のようになります。
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)
}