안녕 나는 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'는 불변이어야합니까? 그렇지 않다면 팩토리는 동일한 인수에 대해 다른 결과를 생성합니다. – astef