2017-11-08 5 views
0

여러 개의 하위 도메인이있는 ERP 프로젝트가 있습니다. CQRS 또는 도메인 이벤트를 사용하지 않습니다.DDD 제한된 컨텍스트 동일한 개념의 다른 모델

두 개의 하위 도메인이 있습니다. CRM 및 회계. 고객 개념은 두 하위 도메인에서 다르게 모델링되어야합니다. CRM은 회사의 규모 (종업원 수)를 알고 있어야하지만 세금 번호는 알 필요가 없습니다. 회계는 세금 번호를 알아야하지만 크기는 알 필요가 없습니다. 회사 이름은 두 하위 도메인 모두에서 필요합니다.

나는 CRM 고객과 회계 고객 모두를 엔티티로 모델링 할 생각입니다. 그러나 CRM 사용자가 새로운 고객을 생성 할 때마다 회계 고객 인스턴스도 생성해야합니다. 그리고 보고서에 두 하위 도메인의 정보가 필요한 경우 모든 정보가 포함 된 단일 엔터티가있을 때 쿼리가 더욱 복잡해집니다.

이 방법이 있습니까? 더 좋은 방법이 있습니까? 도메인 이벤트를 활용하지 않고 여러 하위 도메인을 갖는 것이 합리적입니까?

+0

유비쿼터스 언어의 관점에서 보입니다. CRM 고객과 Accouting 고객은 분명히 동일하지 않습니다. 이것이 CQRS없이 또는 두 BC 사이의 적용 가능한 분리없이 유지되는지 여부는 전적으로 사용자 수, 개발 팀 규모, 배포 가능성 요구 사항 등에 따라 달라집니다. – guillaume31

+0

도메인 이벤트는 유지 관리 관점에서 볼 때 더욱 실제적입니다 (반대로 의존성을 추가하고 구독자를 추가하는 것이 더 쉽습니다), 비동기성에 대한 문호를 열어 시간이 지남에 따라 어떻게되는지 더 잘 표현하고, 개발팀 내부 및 도메인 전문가와 더 잘 소통 할 수 있습니다. – guillaume31

+0

바운드 컨텍스트 경계를 올바르게 확인 했습니까? https://medium.com/@wrong.about/ddd-strategic-patterns-how-to-define-bounded-contexts-2dc70927976e – zapadlo

답변

2

DDD가 필요합니까? 유스 케이스는 아주 단순한 것처럼 보였을 것입니다. 단지 다른 모든 복잡한 것들을 생략했을 것입니다. 그러나 당신이 묻는 정보만으로도 간단한 CRUD 응용 프로그램이 할 수 있습니다. 보고와 같은 데이터 위주의 앱에는 DDD가 필요하지 않습니다. 일관성을 유지하기 위해 엄격한 방법으로 데이터를 수정해야하는 경우 DDD가 필요합니다.

DDD가 필요하다고 확신하는 경우 모델의 요점은 도메인의 불변성을 막는 것임을 이해해야합니다. CRM 고객은 항상 동일한 회계 고객을 보유해야한다고 말합니다. 이 문제는 오늘날 비즈니스에서 어떻게 처리됩니까? 회계는 CRM 고객에 대해 어떻게 알고 있습니까? 회계는 그들이 CRM과 동일한 고객에 대해 말하는 것을 어떻게 알 수 있습니까? 그러나 그들은 현재 그것을하고 있습니다. 모델을 시도해야합니다.

예를 들어 실제 상황에서 다른 사람들에게 알려주는 것만으로 실생활에 적용한다면, CRM 컨텍스트에서 새 고객 이벤트를 게시하게하고 회계 컨텍스트에서 회계 컨텍스트를 생성하여 회계 컨텍스트에 대응할 수 있습니다.

다른 한편으로는 둘 다 다른 것으로부터 그것에 대해 배우면 둘 다 다른 무언가의 이벤트에 반응 할 수 있습니다.

이벤트를 사용하지 않으려는 경우 CRM 컨텍스트에서 회계 컨텍스트로 직접 호출 할 수 있습니다. 앱이 성장함에 따라 이것이 더 제한적으로 성장할 것이라는 것을 알고 있지만, 다시 간단한 도메인을 가지면 문제는 없습니다.

또한 데이터를 쿼리하는 것은 수정하는 것과 다릅니다. 쿼리는 도메인 모델 엔터티 및 값 개체를 사용해서는 안됩니다. 그것은 가능할 수 있지만, 그것에 의해 제약되어서는 안됩니다. 이는 쿼리가 읽기 전용 작업이기 때문입니다. 데이터를 변경하려는 경우에만 도메인 모델에 데이터를 저장해야합니다.

+0

실제 도메인이 더 큽니다.도메인 전반에 걸쳐 사용되는 개념에 대한 대부분의 논의에서 하나의 도메인은 엔티티의 모든 정보를 가지며 다른 도메인은 해당 엔티티의 일부를 값 개체로 복사하기 때문에 사례를 보여줍니다. 나는 두 도메인이 똑같은 것에 대해 완전히 다른 정보를 필요로하는지 궁금했다. 어디에 보관합니까, 어떻게 동기화합니까? 실생활의 부분을 보는 것은 내가 빠뜨린 것입니다. 이것은 항상 저에게 기술적 인 문제처럼 보였습니다. – aycanadal