문제

CQRS의 기본 신조 중 하나는 내가 이해 한 바와 같이 명령은 동작 중심이어야하며 비즈니스 또는 UL에 데이터 중심, 즉 CRUD가 아닌 값을 가져야한다는 것입니다. 고객 업데이트에 중점을 두는 대신 CustomerHasmoved와 같은 명령이 있습니다. 특정 데이터를 수정하기 위해 CRUD 화면이 있다면 어떨까요? 예를 들어, 우리는 틀린 고객의 이름을 변경해야합니다. 이것은 실제로 비즈니스에 큰 가치가 없습니다. 이것이 UpdateCustomer 명령의 우산 아래에 있어야합니까?

도움이 되었습니까?

해결책

실제로 고객의 이름을 업데이트 해야하는 여러 가지 이유가있을 수 있습니다. 당신이 말했듯이, 그것은 철자가 틀릴 수 있거나 ... 당신은 결혼하고 당신의 이름을 남편에게 바꿀 수 있습니다.

UpdateCustomer 명령 만 있으면 원래 의도를 잃고 각각에 대해 다른 동작을 가질 수 없습니다. 이름이 Misselled 인 경우 데이터베이스를 업데이트하는 것만 큼 간단 할 수 있지만 고객이 결혼 한 경우 마케팅 출발에 알릴 수 있으므로 할인을 제공 할 수 있습니다.

귀하의 엔티티가 순전히 CRUD 인 경우, 귀하가 속성 수정과 연관 될 의도는 없으며 UpdateEntityCommand를 갖는 것은 괜찮습니다. 그런 다음 천천히 더 많은 작업으로 전환 할 수 있습니다.

다른 팁

나는 이것에 대한 의견을 빨리 튀어 나오고 싶다.

일부 객체는 실제로 멍청하고 괜찮다는 점에 유의해야합니다. 제품을 사람들에게 배송하는 도메인에서 이름이 변경되는 이유를 실제로 신경 쓰지 않을 수도 있고 메일 레이블을 인쇄하기 위해 해당 데이터 만 필요합니다. 속임수는 행동을 기본값으로 만들고 CRUD 인터페이스로 되돌리는 것입니다.

그렉

CustomerHasmoved는 고객 위치를 업데이트 한 후 해고 된 이벤트입니다. 이 이벤트는 읽기 데이터베이스/캐시 데이터베이스를 업데이트합니다. GUI의 명령은 Movecustomer 또는 그와 비슷한 것이어야합니다. 나는 고객 이름의 업데이트를 UpdateCustomer와 같은 명령에 넣을 것이라고 생각합니다.

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