Domain Driven Design에 뛰어 들었습니다. 그리고 제가 접하게 될 일부 개념은 표면상에서 많은 의미를 갖지만, 더 많이 생각할 때 그것이 정말로 좋은 아이디어인지 궁금합니다.
예를 들어 집계의 개념은 의미가 있습니다. 전체 도메인 모델을 다룰 필요가 없도록 작은 소유 도메인을 만듭니다.
그러나 웹 응용 프로그램의 맥락에서 이것에 대해 생각할 때 작은 데이터 하위 집합을 가져 오기 위해 데이터베이스에 자주 충돌합니다. 예를 들어, 페이지에는 주문 수만 나열 할 수 있으며, 주문을 열기 위해 주문을 클릭하고 주문 ID를 볼 수있는 링크가 있습니다.
내가 잘 이해 집계를 해요, 난 일반적으로 구성원을 포함하는 것 인 OrderAggregate 돌아 저장소 패턴을 사용 GetAll
, GetByID
, Delete
,와 Save
. 좋아, 잘 들린다. 그러나...
GetAll을 호출하여 모든 주문을 나열하면이 패턴에 전체 집계 정보 목록, 전체 주문, 주문 라인 등을 반환해야하는 것처럼 보입니다. 해당 정보의 작은 하위 집합 만 필요한 경우 (헤더 정보 만).
뭔가 빠졌습니까? 아니면 여기서 사용할 최적화 수준이 있습니까? 나는 당신이 필요로하지 않을 때 전체 정보를 반환하는 것을 옹호한다고 상상할 수 없습니다.
확실히, 저장소와 같은 메소드를 생성 할 수는 GetOrderHeaders
있지만 처음에는 저장소와 같은 패턴을 사용하는 목적을 무효화하는 것처럼 보입니다.
누구든지 나를 위해 이것을 명확히 할 수 있습니까?
편집하다:
더 많은 연구를 한 후, 여기서의 단절은 순수한 리포지토리 패턴이 대부분의 사람들이 리포지토리를 생각하는 것과 다르다는 것입니다.
Fowler는 저장소를 컬렉션 의미론을 사용하는 데이터 저장소로 정의하며 일반적으로 인 메모리로 유지됩니다. 이것은 전체 객체 그래프를 만드는 것을 의미합니다.
Evans는 리포지토리에서 Aggregate Roots를 포함하도록 변경하므로 리포지토리는 Aggregate의 개체 만 지원하도록 절단됩니다.
대부분의 사람들은 리포지토리를 영광스러운 데이터 액세스 개체로 생각하고 원하는 데이터를 얻을 수있는 메서드를 만들 수 있습니다. Fowler 's Patterns of Enterprise Application Architecture에 설명 된 의도는 아닌 것 같습니다.
또 다른 사람들은 저장소를 테스트 및 조롱을보다 쉽게하거나 지속성을 시스템의 나머지 부분에서 분리하기 위해 주로 사용되는 단순한 추상화로 생각합니다.
답은 이것이 처음 생각했던 것보다 훨씬 더 복잡한 개념이라는 것입니다.