2016-10-03 2 views
4

도메인 로직과 읽기 모델이 혼합되어 있기 때문에 읽기 모델에 어려움을 겪고 있습니다. 호텔이나 항공사에 대한 견적을받는다고 상상해보십시오. 내 경우에는 배송됩니다. 견적을 받으려면 기존 요율표를 읽고 요율을 계산해야합니다. 이것을 견적으로 기록하여 결국 주문으로 바꿀 수도 있지만 따옴표 부분은 본질적으로 일부 논리 (즉, 현재의 연료 요금을 얻는 서비스)가 포함 된 비율로 계산하는 읽기입니다. 집합체는 견적이 될 것입니다.도메인의 모델 읽기

그래서 계약 모델을 얻기 위해 읽기 모델을 사용하고이를 도메인에 매핑 하시겠습니까? 읽기가 최적화 될 것이라는 점을 명심하십시오. 단순한 GetByID가 아니라 성능을 위해 읽기 저장소에서 오는 것이 바람직합니다.

+0

따옴표가 도메인 모델의 최상위 엔티티 인 경우 - 내가 예상 한 특별한 증거가 없으면 따옴표를 쓰는 것이 좋습니다. – VoiceOfUnreason

+1

그렇습니다. 제작하는 것은 글쓰기가 가능하지만 생산에 필요한 정보를 얻는 것이 중요합니다. 이것은 글쓰기가 될 수 있습니다. 로직이 다른 로직 (예 : 사용자/계정 설정)에 의존하여 도메인 로직을 구동합니다. –

+0

따옴표가 어떻게 무효화됩니까? 얼마 후에 변경되는 요금을 읽으면 어떨까요? 그 다음에 문제가되지 않는다면 RateService 인터페이스를 도메인에 선언하면 구현은 어디서나 데이터를 가져올 수 있습니다. – plalx

답변

4

그렇다면 계약서/요율표를 얻기 위해 읽기 모델을 사용하고이를 도메인에 매핑 하시겠습니까? 읽기가 최적화 될 것이라는 점을 명심하십시오. 단순한 GetByID가 아니라 성능을 위해 읽기 저장소에서 오는 것이 바람직합니다.

의도적으로 집계는 집계 경계 외부의 모델 상태와 즉시 일치 할 필요는 없습니다. "다음"상태는 현재 상태의 함수이고 전달 된 인수는 전달됩니다. 이상적인 집계는 읽은 모델에 전혀 의존하지 않고, care의 상태가 어디에서 왔는지를 나타냅니다.

즉, "이 집계에 견적을 쓸 때 그 총액에서 현재 환율을 얻으려면 어떻게해야합니까?"라는 질문에 어려움을 겪고 있다면 뭔가 잘못되었습니다.

하지만 즉각적인 일관성이 필요하지 않으면 (대부분의 경우 그렇지 않은 경우) 여러 가지 가능성이 있습니다.

가장 직접적인 것은 클라이언트가 읽기 모델에서 필요한 상태를 얻은 다음 해당 상태를 쓰기 모델로 전달한다는 것입니다. 명령에 상태를로드하면 REST가 성공적으로 수행 된 이유 중 하나 인 "혼동"이 방지됩니다.

경우에 따라 모델의 다른 부분의 "최근"상태를보다시기 적절하게 유지하려는 경우가 있습니다. 이 경우 응용 프로그램이 변경 내용을 집계에 제출하기 전에 클라이언트 대신 모델을 쿼리하는 것이 좋습니다. 완벽하게 합리적인.

어떤 경우에는 집계 자체가 쿼리를 수행하기를 원할 것입니다. 이를 달성하는 가장 일반적인 방법은 도메인 서비스를 이용하는 것입니다. 쿼리 개체를 집계에 전달하고 집계는 적절한 상태로 쿼리를 호출하고 응답을 가져온 다음 자체에 결과를 적용하는 방법을 선택합니다. 현재하는 일.

모두에서 모델에서 돌아오고있는 상태는 최근 인 것으로 반드시 최신 일 필요는 없습니다. 예를 들어 모델의 다른 부분이 현재 쿼리 결과가 변경되는 방식으로 변경되지 않는다는 보장은 없습니다.

이러한 경우 모두 호출자 (특히 집계)는 도메인 서비스에서 제공하는 계산의 세부 사항으로부터 완벽하게 격리됩니다. 도메인 서비스는 도메인 서비스가 제공해야하는 유일한 부분입니다. 반환 된 비율은 읽기 모델에서 계산 된 쓰기 모델에서 계산되거나 캐시에서 가져온 것입니다.

내 질문에 도메인 내에서 읽은 모델에 액세스 한 다음 도메인 개체에 매핑해야합니다.

아니오. 쓰기 모델은 자체 상태 및 매개 변수와 상호 작용해야합니다. 명령을 처리하기 위해 읽기 모델에서 데이터를 조회해야하는 경우 매개 변수 중 하나는 도메인 서비스 구현이어야하며 여기서 도메인 서비스 구현은 조회를 수행하고 그 결과를 도메인 객체로 변환합니다.

+1

나는 당신이 말하는 것을보고 있지만, REST 게시물에 따라 국가를 전달하는 것은 현실적이지 않습니다. 이 경우 나는 다른 주와의 일관성에 대해 걱정하지 않는다. 내 질문은 도메인 내에서 읽은 모델에 액세스 한 다음 도메인 개체에 매핑해야합니다. 일반적으로 ID별로 집계가 이루어 지므로 최적화 된 읽기 전용 저장소에서 발생하는 속도가 느리기 때문에 이는 성능 향상을위한 것입니다. –

+0

또 다른 예는 조작 및 사용자 설정입니다. 게시물에서 이들을 전달하지 않으려면 데이터베이스/캐시 (repo/read 모델)에서 가져 와서 이들이 무엇인지에 따라 비즈니스 로직을 수행해야합니다. 집계에 속성이 있어야하며 작업 목록이 있어야하지만 어떻게로드되는지는 질문입니다. –