DDD 및 CQRS를 사용하여 캘린더를 모델링하는 방법을 알고 싶습니다. 내 문제는 사건의 수를 늘리는 것입니다. 나는 이벤트가 포함 된 집계 루트 (Aggregate Root)로 간주한다 (달력 이벤트). ReadSide를 내 명령에서 사용하고 싶지 않지만 도메인 수준에서 이벤트 충돌을 검사 할 방법이 필요합니다.엄청난 수의 어린이를 포함한 골재 루트
답변
DDD 및 CQRS를 사용하여 캘린더를 모델화하는 방법을 궁금합니다. 내 문제는 사건의 수를 늘리는 것입니다.
"수명이 긴"집계에 대한 가장 일반적인 대답은 그 수명을 에피소드로 분해하는 것입니다. 예를 들면 회계사가 end of the fiscal year에 닫을 임시 계정이 있습니다.
특정 경우에는 도메인에 적합한 그레인에서 "2 월 캘린더", "3 월 캘린더"등과 같이 "캘린더"가 아닌 것이 좋습니다.
정확성면에서 DDD에 관한 내용이 맞는지 확실하지 않습니다. 요점은 모델이 무효 상태에 들어가는 것을 허용하지 않는 것이라고 믿습니다.
예,하지만 유효하지 않은 상태는 정의하기 까다로운 문제입니다. Udi Dahan이 제안했습니다. this observation
마이크로 초의 타이밍 차이로 인해 핵심 비즈니스 동작이 달라지지 않아야합니다.
더 간결하게, 명령 B를 처리하여 다음 처리 명령 (A)는 다음 또한
이의 당신의 "이벤트를 선택하자 먼저 처리 명령 B를 결국 사실, 다음 A.해야 유효한 상태를 생산 충돌 "예제. 두 개의 명령 scheduleMeeting(A)
과 scheduleMeeting(B)
을 처리한다고 가정하면 도메인 모델은 A
및 B
이과 충돌 함을 인식합니다. 수수께끼 : 캘린더가 유효한 상태로 유지되도록하려면 어떻게해야합니까?
일반성을 잃지 않고 동전을 뒤집어 어떤 명령이 먼저 도착하는지 결정할 수 있습니다. 내 동전에 꼬리가 생겨서 B
명령이 먼저 도착했습니다.
on scheduleMeeting(B):
publish MeetingScheduled(B)
이제는 A
회의 명령이 도착합니다.유효한 달력은 충돌을 허용하지 않는 경우, 구현은 명령이 다음 고려할 필요, 결과에 영향을 안 도착한다는 생각을 받아 들일 경우, 다른 한편으로
on scheduleMeeting(A):
throw DomainException(A conflicts with B)
처럼 보일 필요 또 다른 접근법. 아마도
입니다on scheduleMeeting(A)
publish MeetingScheduled(A)
publish ConflictDetected(A,B)
, 일정 집계 예약 된 이벤트뿐만 아니라 제기 한 갈등뿐만 아니라 추적 모델링된다. aggregates and RFC 2119
이벤트도 집계 루트 일 수 있습니다. 귀하의 비즈니스 제약 조건을 모르겠지만 두 개의 이벤트 콜라이드가 있다면 사용자에게 어떻게 든 수동 조치를 취할 수 있음을 알릴 수 있다고 생각합니다. 그렇지 않으면 이 실제로 실제로 일 경우 대용량 캘린더 AR의 속도를 높이기 위해 스냅 샷을 사용할 수 없습니다.
내 명령에 ReadSide를 사용하고 싶지 않지만 도메인 수준에서 이벤트 충돌을 검사해야합니다.
집계 명령 처리기 내에서 읽기 모델을 쿼리 할 수 없습니다. colision 감지를 위해 나는 EventScheduled
이벤트에 가입하고 콜리 전이 발생했을 때 (많은 이벤트 인 경우 비동기 가능한) 체크하고 어떻게 든 사용자에게 알리는 특별한 DetectColisionSaga
을 생성해야합니다.
- 1. 갑자기 엄청난 수의 인스턴스
- 2. 엄청난 수의 XML 편집
- 3. 서버에 엄청난 수의 레코드 추가
- 4. 엄청난 수의 파일을 청크로 다운로드
- 5. 엄청난 수의 열을 합친 것
- 6. Solr에 엄청난 수의 파일 추가하기
- 7. 플롯 : 엄청난 수의 데이터 포인트
- 8. 엄청난 수의 조합에 대한 몽고 (mongodb) '레이아웃'
- 9. SSIS를 사용하여 엄청난 수의 레코드 선택
- 10. pytables를 사용하여 엄청난 수의 배열을 구축하십시오.
- 11. 외부 HD의 루트에있는 엄청난 수의 파일 삭제
- 12. Magento - 엄청난 수의 db 쿼리 x 페이지
- 13. 엄청난 수의 레코드 업데이트 - 성능 최적화
- 14. 엄청난 수의 레코드가있는 테이블에서 그룹을 최적화하는 방법
- 15. 엄청난 수의 점에 대한 가장 가까운 쌍
- 16. 엄청난 수의 태그를 하나의 핫 인코딩
- 17. 많은 수의 입방 루트
- 18. jQuery - 어린이를 포함한 모든 클래스 및 요소를 지우십시오.
- 19. R - 골재 화학식
- 20. DDD : 모든 골재 뿌리에는 어린이가 필요합니까?
- 21. 엄청난 수의 세션을 저장하는 데 가장 효율적인 데이터 구조는 무엇입니까?
- 22. 서브 쿼리를 기반으로 엄청난 수의 행을 삽입하십시오 ... 문제가 있습니다
- 23. 엄청난 수의 요소가있는 html javascript select 옵션 컨트롤 (예 : 10K)
- 24. BASH : 다른 거대한 목록에 포함되어있는 경우 엄청난 수의 목록 필터링
- 25. 엄청난 수의 레코드에 대한 최상의 성능 검색 쿼리/방법은 무엇입니까
- 26. 엄청난 수의 레코드를 사용하면서 Hibernate를 빠르게 업데이트하는 방법
- 27. ftp 디렉토리 목록 제한 시간. 엄청난 수의 하위 디렉토리
- 28. 엄청난 수의 키로 dict()를 빨리 정렬하는 방법은 무엇입니까?
- 29. EMR을 사용하여 다운로드 URL에서 엄청난 수의 이미지를 처리하는 방법
- 30. iOS에서 장치 메모리가 부족한 경우 장치에 엄청난 수의 이미지가 표시됩니다.
답변 해 주셔서 감사합니다. 다른 달로 달력을 분할하는 것에 대한 귀하의 아이디어는 나에게 완벽하게 유효합니다. 유효성 측면에서 DDD에 관한 내용이 맞는지 확실하지 않습니다. 요점은 모델이 무효 상태가되는 것을 허용하지 않는다는 것입니다. 이는 일정에 따라 모든 이벤트를 알 필요가 있음을 의미합니다 (Agreiggate Root). – ayeo
당신은 시스템이 어떻게 일관된 결과를 낼 수 있는지에 대해 좀 더 자세히 설명 할 필요가 있다고 생각합니다. 왜냐하면 당신이 그것을 묘사 한 방식이기 때문에 여전히 충돌이 발생했음을 감지하기 위해서는 큰 집계 경계가 필요하기 때문입니다. 최종 일관성을 사용하면 이벤트가 별도의 집계가 될 수 있으므로 전체적으로 일정에있는 이벤트 모음을 제거 할 수 있습니다 (쿼리로 대체). – plalx
일종의 자원 관리를 할 때, 나는 Day의 개념을 갖게되었습니다. 놀랍지 만 다른 종사자들도 같은 결론에 도달했습니다. 이벤트와 요일을 모두 가질 수 있으며 상호 호환되는지 확인하십시오 (하루에 가용성이 있고 이벤트가 며칠에 도착할 수 있음). –