내가 계속 직면하는 문제는 데이터 저장소에 대해 효율적으로 작업하면서 도메인 논리에 의해 구동되는 계산 된 값을 처리하는 방법입니다.
예:
서비스를 통해 저장소에서 제품 목록을 반환합니다. 이 목록은 클라이언트가 보낸 요청 DTO의 페이지 매김 정보로 제한됩니다. 또한 DTO는 정렬 매개 변수 (클라이언트 친화적 열거 형)를 지정합니다.
간단한 시나리오에서는 모든 것이 잘 작동합니다. 서비스는 페이징 및 정렬 표현식을 리포지토리로 보내고 리포지토리는 DB에 효율적인 쿼리를 발행합니다.
그러나 도메인 모델에서 메모리에 생성 된 값을 정렬해야 할 때 모든 것이 고장납니다. 예를 들어 Product 클래스에는 비즈니스 논리를 기반으로 bool을 반환하는 IsExpired () 메서드가 있습니다. 이제는 저장소 수준에서 정렬하고 페이지를 지정할 수 없습니다. 모두 메모리에서 비효율적이며 서비스는 이러한 매개 변수를 언제 저장소에 발행하고 언제 정렬 / 페이징을 수행해야하는지에 대한 복잡성을 알아야합니다. 그 자체.
나에게 이해가되는 유일한 패턴은 db에 엔티티 상태를 저장하는 것입니다 (IsExpired ()를 읽기 전용 필드로 만들고 저장하기 전에 도메인 논리를 통해 업데이트하십시오). 이 로직을 별도의 "read model / dto"및 "reporting"리포지토리로 분리하면 모델을 원하는 것보다 더 빈약하게 만듭니다.
BTW, 이와 같은 계산에 대해 본 모든 예제는 실제로 메모리 내 처리 및 장기적으로 훨씬 덜 효율적이라는 사실에 의존하는 것처럼 보입니다. 어쩌면 나는 조기에 최적화하고 있지만 그것은 나에게 맞지 않습니다.
DDD와 관련된 거의 모든 프로젝트에서 공통적이라고 확신하기 때문에 다른 사람들이 이것을 어떻게 처리했는지 듣고 싶습니다.