DDD의 관점에서 Category
, Product
그리고 Property
엔티티 : 그들은 자신의 정체성을 가진 객체에 대한 모든 대응은.
옵션 1 : 독창적 인 디자인
Category
단일 집계의 루트를 만들었습니다 . 한편으로 집계는 객체가 수정 될 때 일관성을 보장해야하고 다음 중 하나 Product
를 가져야 하기 때문에 이치 Properties
에 맞습니다 Category
.
그러나 한편으로 단일 집계는 모든 개체가 해당 개체를 소유 한 루트와 관련되어 있으며 모든 외부 참조는이 집계 루트를 통해 이루어져야합니다. 이것은 다음을 의미합니다.
- 하나의 특정
Product
은 하나에 만 속합니다 Category
. Category
가 삭제 되면의 도 삭제됩니다 Products
.
- 특정
Property
은 하나에 만 속합니다 Category
. 그렇지 않으면 "TV 화면"과 "컴퓨터 모니터"가 두 가지 범주 인 경우 "TV 화면 : 크기"와 "컴퓨터 모니터 : 크기"는 서로 다른 속성이됩니다.
두 번째 요점은 당신의 이야기에 해당하지 않습니다. " 하지만 Property
어떤 카테고리에 속하지 않은 새 것을 추가해야 할 때 어떻게해야합니까? " 그리고 Properties
다른에서 동일한 것을 사용할 수 있는지 확실하지 않습니다 Categories
.
옵션 2 : 골재 외부의 속성
Property
가와 독립적으로 존재 하는 경우 Categories
집계 외부에 있어야합니다. 그리고 공유 할 경우 같은 Properties
사이 Categories
(높이, 폭, 크기, 등등 ...에 대한 의미가된다). 이것은 분명히 사실 인 것 같습니다.
결과는 Property
집합과 그 집합에 속하는 것들 사이의 링크 에 있습니다. 집합의 내부에서로 이동할 Property
수는 있지만 더 이상 a Property
에서 해당 값 으로 직접 이동할 수는 없습니다 . 이 탐색 제한 사항은 UML 다이어그램에 표시 될 수 있습니다.
이 디자인 으로 참조 의미론 (예 : java)을 가진 List<Property>
in 을 가질 수 있습니다 Category
. 목록의 각 참조 Property
는 저장소 의 공유 가능한 객체를 나타냅니다 .
이 디자인의 유일한 문제점은 a를 변경 Property
하거나 삭제할 수 있다는 것 입니다. 집계 외부에 있으므로 집계는 불변의 일관성을 처리 할 수 없습니다. 그러나 이것은 문제가되지 않습니다. 그것은 DDD 원칙과 실제 세계의 복잡성의 결과입니다. 에릭 에반스 (Eric Evans)는 " 도메인 중심 디자인 : 소프트웨어의 핵심 요소 인 태클 링 복잡성 (Tackling Complexity) "에 관한 에릭 에반스 (Eric Evans)의 인용문을 인용했다 .
AGGREGATES에 해당되는 규칙은 항상 최신 상태가 아닙니다. 이벤트 처리, 일괄 처리 또는 기타 업데이트 메커니즘을 통해 지정된 시간 내에 다른 종속성을 해결할 수 있습니다. 그러나 AGGREGATE 내에 적용된 불변은 각 거래가 완료되면 시행됩니다.
그렇습니다.를 변경하면 Property
서비스가 카테고리를 확인하여 필요에 따라 업데이트되는지 확인해야합니다.
옵션 3 : 다른 집계의 범주, 속성 및 제품
Product
a가 단일에 속한다 는 가정이 있는지 궁금합니다 Category
.
- 나는 종종 온라인 상점이
Product
여러 곳에서 제안하는 것을 본다 Categories
. 예를 들어 "노트북"범주와 "컴퓨터"범주 아래에 "노트북 브랜드 X 모델 Y"가 있고 "프린터", "스캐너"및 "팩스"범주에 "다기능 프린터 Z"가 있습니다.
- 누군가
Product
첫 번째 것을 만들고 나중에 카테고리에 할당하고 값을 채울 수 있습니까?
- 카테고리를 나누려면 제품을 삭제 한 다음 새 카테고리 아래에서 다시 만드시겠습니까?
집계를 단순화하지 않으며 집계에 적용되는 규칙이 더 많아집니다. 그러나 시스템은 훨씬 더 미래의 증거가 될 것입니다.