문제

Greg Yound가 DDD 에서이 비디오를 보았습니다

http://www.infoq.com/interviews/greg-young-ddd

메모리 변경이있을 때 DDD로 명령 쿼리 분리 (CQS)를 구현할 수있는 방법이 궁금하십니까?

CQS에는 두 개의 리포지토리가 있습니다. 하나는 명령 용으로, 하나는 쿼리 용입니다. 두 개의 객체 그룹, 명령 개체 및 쿼리 객체. 명령 개체에는 메소드 만 있으며 객체의 모양을 노출시킬 수있는 속성이 없으며 화면에 데이터를 표시하는 데 사용되지 않습니다. 반면에 쿼리 객체는 화면에 데이터를 표시하는 데 사용됩니다.

비디오에서 명령은 항상 데이터베이스로 이동하므로 쿼리 저장소를 사용하여 업데이트 된 데이터를 가져오고 화면에서 Redisplay를 가져올 수 있습니다.

ASP.NET에서 화면과 같은 CQ를 사용하여 메모리에서 변경 사항을 작성하고 변경 사항이 데이터베이스에 지속되기 전에 변경 사항을 여러 번 업데이트해야합니까?

예를 들어

  1. 쿼리 저장소에서 쿼리 객체를 가져와 화면에 표시합니다.
  2. 편집을 클릭합니다
  3. 쿼리 객체 저장소에서 쿼리 객체를 반조하고 편집 모드에서 양식에 표시합니다.
  4. 양식에서 값을 변경하여 자동으로 표시되고 명령 개체를 가져와 관련 명령을 발행합니다.
  5. 해야 할 일 : 이제 명령이 계산 된 필드를 변경할 때 업데이트 된 객체를 표시해야합니다. 명령 개체가 데이터베이스에 저장되지 않았으므로 쿼리 저장소를 사용할 수 없습니다. 그리고 CQ를 사용하면 화면에 표시 할 명령 개체의 모양을 노출시키려는 것은 아닙니다. 업데이트 된 변경 사항이 화면에 표시 할 수있는 쿼리 객체를 어떻게 다시 얻을 수 있습니까?

내가 생각할 수있는 몇 가지 가능한 솔루션은 세션 저장소 또는 명령 개체에서 쿼리 객체를 가져 오는 방법을 갖는 것입니다. 아니면 CQ가 이러한 유형의 시나리오에 적용되지 않습니까?

비디오 변경이 데이터베이스로 바로 지속되는 것으로 보이며 도메인 객체에 대한 배치 변경 문제를 해결하고 이전에 수정 된 도메인 객체의보기를 업데이트하는 CQ와 함께 DDD의 예를 찾지 못했습니다. 마지막으로 도메인 객체를 저장하기위한 명령을 발행합니다.

도움이 되었습니까?

해결책

이를 위해 CQ를 실제로 사용하려면 쿼리 repo와 Writ 일반적 으로이 참조는 외부 데이터베이스를 통해 이루어 지지만 귀하의 경우 목록이 될 수 있습니다.u003CT> 또는 유사합니다.

다른 팁

그래서 여기서 원하는 것은 더 세분화 된 명령입니다.

예 : 사용자는 웹 페이지와 상호 작용합니다 (쇼핑 카트로 체크 아웃한다고 가정 해 봅시다).

정보를 얻는 여러 페이지가 명령을 내리고 있습니다. 명령은 사용자가 전송되지 않습니다 실제로 모든 정보가 단일 명령으로 도메인으로 전송되는 위치를 확인합니다. "체크 아웃"명령이라고합니다.

프리젠 테이션 모델은 이러한 유형의 상호 작용을 추상화하는 데 상당히 도움이됩니다.

도움이 되었기를 바랍니다.

그렉

나머지 우려 사항에 대해서도 ...

이것들은 CQR과는 반대로 최종 일관성에 더 많은 관심사입니다. 결국 CQRS와 일치 할 필요는 없습니다. 명령 처리를보고 스토어에도 (또는 언급 된 것과 동일한 물리적 저장소를 사용) 일관된 방식으로 작성할 수 있습니다. 나는 실제로 사람들 이이 작업을 기본 아키텍처로 수행하고 나중에 와서 AZS와 관련된 비용이 있기 때문에 필요한 경우 최종 일관성을 도입 할 것을 권장합니다.

메모리에서 일반적으로 사용합니다 관찰자 디자인 패턴.

실제로, 당신은 항상이 패턴을 사용하고 싶지만 대부분의 데이터베이스는 DB의 무언가가 변경 될 때 앱에서 메소드를 호출하는 효율적인 방법을 제공하지 않습니다.

그만큼 작업 단위 디자인 패턴 엔터프라이즈 애플리케이션 아키텍처 패턴 CQS와 잘 일치합니다. 기본적으로 데이터베이스에서 물건을 지속하는 큰 명령입니다.

JDONFRAMEWORK는 CQRS DDD Java 프레임 워크입니다. 도메인 이벤트 + 비동기 패턴, 자세한 내용 https://jdon.dev.java.net/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top