2012-01-12 2 views
2

시스템에 두 개의 도메인이 있다고 가정 해 봅시다 : Orderdomain과 Customerdomain.도메인간에 가치 객체를 공유하는 것이 좋은 생각입니까?

두 도메인이 모두 복잡하고 크기가 커서 한 도메인으로 병합 할 수 없습니다.

그러나 그들 사이에는 비즈니스 관계가 있습니다. 각 주문에서 고객은 주문자 역할을합니다.

나는 적어도 내 마음 속에 세 가지 해결책이있다.

  1. customerId를 Order 및 Customer 모두에 기본 유형으로 저장하십시오.

  2. 두 개의 값 객체 OrderDomain.CustomerId 및 CustomerDomain.CustomerId를 만듭니다. 이러한 유형 유형이 동일한 지 비교할 수 있는지 확인하십시오.

  3. 는 valeobject의 고객 ID와 제 3 성분 "SharedValueObjects"을 확인하고 두 도메인이 바람직하다 또는 당신은 앞으로 더 나은 하나 가지고 올 수있는 하나

에서 해당 유형을 사용할 수 있습니까?

+1

도메인을 말할 때 엔티티를 참조하는 것처럼 보입니다.문제는 명확하지 않다. 구현 세부 사항과 개념적 디자인이 섞여 있다고 생각한다. Order와 Customer가 그들과 비즈니스 관계를 맺고 있다면, 그 관계를 일등 시민으로 모델화하십시오. – JuanZe

+0

아니요 엔티티 또는 집계를 언급하지 않았습니다. 나는 다른 영역을 언급하고 있었다. 그러나 엔티티가 동일한 값 객체 유형을 공유 할 수 있다는 간단한 대답을 통해 동일한 질문을 적용 할 수 있습니다. 필자의 견해로는 단단히 결합 된 하나의 도메인에서 큰 비즈니스를 모델링 할 수 없습니다. 엔티티는 일종의 관계가 있기 때문에 제 세계에서 제일 시민이되어서는 안됩니다. 그 도메인 모델은 시간이 지남에 따라 개발 될 짐승이 될 것입니다. – Glenn

+2

고객을 주문과 어떻게 분리 할 수 ​​있습니까? 하나는 다른 하나 없이는 의미가 없습니다. 고객없이 주문할 수 있습니까? 그렇지 않다면 어떻게 같은 도메인에 있지 않을 수 있습니까? – Dan

답변

4

가치 개체에 대한 일반적인 질문과 의견에서 더 구체적인 질문에 모두 답변하려고합니다.

  1. 도메인은 값 객체를 공유 할 수 있습니까?

에 달려 있습니다. 현재 우리는 15 개 정도의 대규모 서비스를 가지고 있으며 "EMailAddress", "PhoneNumber", "Money"등과 같은 값 유형을 공유합니다. 이러한 유형은 잘 정의되어 있으며 공유 문제는 없지만 이 다른 곳에서 사용될 수 있기 때문에 공유 된 가치 유형을 실제로 사용 된 것과 공유하기 때문에 물건을 공유하지 않습니다. 공유 할 때 시스템 전체에 걸친 가격을 지불해야합니다.

  1. 고객과 주문 간의 관계가 키를 래핑하는 값 개체로 표시됩니까?

아니요. 다른 사람이 지적했듯이 고객은 주문 도메인에서 작업하는 누군가가 데이터를 알고 필요하다고 생각합니다. "고객"과 "주문"이 두 개의 다른 도메인을 대표한다고 주장하는 경우 "고객"- 도메인이 CRM- 데이터와 같은 것으로 가정하고 있습니까? '고객'과 '주문'을 모델링하는 경우 '고객'- 도메인은 '주문'도메인에 필요한 데이터를 포함 할 수 없으며 청구서 수신 주소를 예로들 수 있습니다. 단단한 커플 링 및 거대한 객체 그래프에 대한 귀하의 이의를 이해하고 있지만, 시스템에서 여러 "고객"정보를 허용하도록하여 처리 할 수 ​​있습니다. 각 "고객"은 한정된 컨텍스트 내에서 고유 한 데이터 및 동작 집합을 나타냅니다. 예를 들어 CRM 도메인의 Customer 엔티티와 "Order"- 도메인의 Customer 엔티티를 둘 다 가질 수 있습니다 ("Order"는 캡슐화 된 비즈니스 집합이 아닌 엔티티처럼 들리기 때문에 실제로 Ordering-domain을 추측합니다). 프로세스). 고객의 CRM 도메인에는 고객이 전화 번호, 연락 담당자, 우편 주소 등), 주문서에 고객이 확실히 주문을 할 수 있으며 청구서 수신 주소 등이있을 수 있습니다. 요약하면 : 모든 것을 가지고있는 고객을 창출하지 말고 자신의 도메인에 넣고 주문과의 관계를 제거하면 개체 그래프의 크기 만 줄입니다.

+0

두 도메인 모두에서 필요로하는 고객 정보는 "고객 이름"과 같이 어디에 보관합니까? – aycanadal

+1

두 도메인에서 고객 이름이 동일합니까? 예 : 고객의 이름을 변경 한 경우 이전 주문에 변경 사항이 반영되어야합니까? 나는 도메인 차이를 찾고 따라서 두 도메인에서 이름을 모델링하려고합니다. 참고 : 보고서 또는보기의 데이터를 사용한다고해서 두 도메인의 데이터를 복제해야한다는 것은 아닙니다. 또한 서비스 경계가 잘못되었음을 나타낼 수 있습니다. – Marius

+0

동일하면 모든 곳에서 변경해야합니다. 입력 오류를 수정하거나 다른 이유로? – aycanadal