こんにちは 私はDDDに従ってアプリケーションを作成しようとしています。工場でのリポジトリの使い方
public class Item { public Category Category { get; protected set; } ... } public class SpecificItem : Item { ... } public class Category { public static int IdOfCategoryForSpecificItem = 10; public int Id { get; set; } }
そして今、私はSpecificItem型のオブジェクトを作成する方法と工場を作成したいと思います:私は、次のエンティティを持っているんです。しかし、この特定の項目は特定のカテゴリに属している必要があります。これは、工場や使用リポジトリを作成するための正しい方法です
- :?
public class ItemFactory { public static SpecificItem CreateSpecificItem(object someArguments) { IRepository<Category> repository = null // How to get repository? return new SpecificItem { Category = repository.FirstOrDefault(i => i.Id == Category.IdOfCategoryForSpecificItem), // additional initialization }; } }
そして今、私の質問:だから私はこのような工場を作成しましたか
- リポジトリを取得するには? DIは静的メソッドなので使用できません。私はServiceLocatorが好きではありません。単体テストが難しいからです。
- おそらく、この問題のより良い解決策があります。
+1 – poindexter12
私は唯一懸念しているのは、集約ルートにパーシスタンスサービスを提供しないため、少なくともDDDの意味ではリポジトリを持っていないように見えるということです。しかし、ORMレベルでリポジトリを使用することは、少なくとも工場の実装が依然としてアプリケーションインフラストラクチャであると私が理解しているので意味があります。 – jpierson
'IRepository'は不変であるべきですか?そうでない場合、factoryは同じ引数に対して異なる結果を生成します。 – astef