내 데이터베이스는 상대적으로 작으며 8 개의 테이블로 구성되며 각각 5 개 미만의 열이 있습니다. 나는 EF를 사용한다. 단일 리포지토리 클래스를 만들었지 만 지금은 사용하는 것이 올바른 방법이 아닐 수도 있습니다. 내 컨트롤러마다 별도의 저장소 클래스를 사용해야합니까? 내가 제품, 사용자, 유니콘을 가지고 있다고 말하면 모든 저장소와 함께 작동하는 하나의 저장소 클래스를 가질 수 있고 각각의 컨트롤러에서 인스턴스화 할 수 있습니까? 아니면 각각에 대해 별도의 저장소 클래스를 만들어야합니까?단일 또는 다중 저장소 클래스?
답변
DDD의 핵심 개념 중 하나는 집합 루트입니다.이 집합은 관련 엔터티의 전체 집합을 관리하는 데 사용되는 '최상위 수준'엔터티입니다.
예를 들어 소매 시나리오에서 '주문'은 주문 자체, OrderItems (예 : 할인 + Product + Amount + 수정 자) 목록, BillingAddress, ShippingAddress 및 PaymentMethod에 액세스 할 수있는 집계 루트가됩니다 . 그것들 각각은 질서의 범위 밖에서 존재할 아무 이유도없는 질서 자체와 밀접한 관련이 있습니다.
각 집계 루트는 루트 아래 개체의 전체 하위 그래프를 보존하는 책임을 맡은 저장소가 있어야합니다. 위의 예에서 항목을 독립적으로 액세스 할 수있는 OrderItems의 저장소가 필요하거나 필요하지 않습니다. 대신 Orders 및 모든 하위 구성 요소를 단일 단위로 처리하는 단일 OrdersRepository를 구현해야합니다.
특정 도메인 모델에 따라 하나 이상의 리포지토리가 필요할 수 있지만 엔티티 유형 당 하나는 필요하지 않을 수 있습니다. 집합 적 루트를 찾을 때 질문해야 할 핵심 질문은 "이 엔티티는 고유 한 ID 및 수명주기를 갖고 있습니까?"입니다. Orders가 수행 하 G로 OrderItem은 그렇지 않습니다.
엔티티마다 repoistory가 좋다고 생각하지 않습니다. 오히려 서비스마다 리포지토리가 좋다고 생각하면됩니다.
예를 들어, 주 응용 프로그램의 포커스가 사용자 인 경우 CategoriesRepository 또는 CarsRepository를 만들지 않겠습니다.
Think Domain-Driven Design을 염두에두고 프로젝트의 논리 구조를 클래스로만 나누지 않고 모든 도메인과 마찬가지로 모든 작업이 Product
과 관련이 있다는 것을 ProductsController
결과적으로 ProductsRepository
내에 있으므로 프로젝트의 일부 측면을 다루는 작업을 갖춘 많은 저장소를 선호합니다.
모든 측면에서 저장소가 필요할 수는 없지만 이것이 사용자가 결정한 사항입니다.
- 1. 다중 SVN 저장소 또는 단일 회사 저장소
- 2. 단일 또는 다중 스레드 TCPListener 클래스?
- 3. 팀간에 공유되는 라이브러리를위한 단일 또는 다중 Git 저장소.
- 4. 단일 네트워크 - 다중 출력 또는 다중 네트워크 - 단일 출력?
- 5. 단일 프로세서 또는 다중 프로세서
- 6. Delphi DataModule 사용법 - 단일 또는 다중?
- 7. 다중 클래스 용 단일 WSDL 파일 생성
- 8. 단일 클래스 라이브러리에서 다중 표준 다루기
- 9. 단일 또는 다중 프로세스, 어떤 기준으로 결정합니까?
- 10. 더 나은 단일 쿼리 또는 다중 쿼리입니까?
- 11. Visual Studio는 다중 또는 단일 문서 인터페이스입니까?
- 12. Java 서버용 단일 또는 다중 스레드 풀?
- 13. 다중 전문화 또는 단일 전문화에 가장 적합합니까?
- 14. MySQL 인덱스 구조 : 다중 또는 단일 인덱스?
- 15. Lucene의 다중 색인 또는 단일 색인?
- 16. 정규식 : 단일 다중 또는 우편 번호
- 17. 복수 저장소, 단일 설정
- 18. 다중 저장소 백엔드가있는 CMS
- 19. localStorage를 사용하는 다중 저장소
- 20. 멀티 플랫폼 단일 파일 저장소
- 21. 다중 생성자, 단일 소비자
- 22. 다중 테이블 또는 다중 스키마
- 23. NHibernate 단일 테이블 다중 값
- 24. 다중 참조 - 단일 인스턴스
- 25. 단일 활동에서 다중 목록보기
- 26. 단일 프로세스에서 다중 appdomain
- 27. 단일 컨트롤러, 다중 (상속 된) 클래스 (레일 3)
- 28. jQuery, 단일 클래스 및 다중 링크를 사용하여 값 가져 오기
- 29. 다중 페이지에서 단일 StrConn 호출
- 30. ActiveMQ 단일 소비자 다중 생산자
위대한 답변! 유용한 정보를 설명하는 유용한 문서 http://devlicio.us/blogs/casey/archive/2009/02/16/ddd-aggregates-and-aggregate-roots.aspx – GibboK