DDD 디자인 문제가 있습니다. 집계를 사용하여 저장소를 사용/사용하는 방법에 대해 혼란스러워합니다.DDD 개념을 따르는 리포지토리 디자인
현재 두 개의 집계가 TecTacClient
과 Entitlement
입니다.
public class TecTacClient
{
(...)
public ICollection<Entitlement> Entitlements { get; }
public bool HasActiveEntitlements => Entitlements.Any(x => x.EndDate >= DateTime.Now);
public TecTacClient((...),IEnumerable<Entitlement> entitlements)
{
(...)
Entitlements = new List<Entitlement>(entitlements ?? Enumerable.Empty<Entitlement>());
}
}
다른 자격 체계로 간주됩니다. 또한 자격 레코드 모음을 보유합니다. 인 타이틀먼트 레코드는 인 타이틀먼트와 별도로 생성/업데이트됩니다. 예를 들어 예약을 생성 할 때도 자격 레코드가 생성됩니다. 이 작업은 권한 부여에 영향을 미치지 않습니다.
public abstract class Entitlement : Entity
{
(...)
public ICollection<EntitlementRecord> Records { get; }
protected Entitlement((...), IEnumerable<EntitlementRecord> records)
{
(...)
Records = new List<EntitlementRecord>(records ?? Enumerable.Empty<EntitlementRecord>());
}
public abstract bool IsEligible(Resource resource);
public DateTimeRange GetCoveringPeriod(DateTime date) { ... }
public double GetAvailableQuantity(DateTime date) { ... }
public void Consume(DateTime date, double quantity) { ... }
public void Match(DateTime date, double quantity) { ... }
public void Cancel(int bookingId) { ... }
}
본인은 리포지토리를 사용하여 집계를 검색/보존해야한다는 것을 알고 있습니다.
두 개의 리포지토리 (tectacclient 및 entitlement)를 만들고 클라이언트 리포에서 검색 한 인 타이틀먼트에 권한 부여 레포를 사용해야한다는 의미입니까?
EntitlementRecords에 대해 다른 저장소를 만들까요? 그렇지 않으면 나는 최종까지 내 집계를 지속/검색 내가 저장소 사이의 종속성을 도입 할 필요가 않는 DDD의 세계에서, 결국이
IEntitlementRepo
{
void Create(...);
void Update(...);
void Delete(...);
void AddRecord(...);
void DeleteRecord(...);
}
처럼 보이는 자격 REPO을 가지고?
DDD 접근법의 목표 중 하나는 집합체 내에서 엔티티를 그룹화하여 모델을보다 풍부하고 단순하게 만드는 것이라고 생각했습니다. 하지만 이제이 기사를 읽은 후에는 지속되어야하는 엔티티가 자체 집계와 연결되어야한다고 생각합니다. 내 상황에서는 클라이언트, 자격 부여 및 레코드 간의 관계를 제거함으로써 나는 빈혈 디자인 (1 엔터티, 1 집계, 많은 논리가 아닌)으로 이동한다는 느낌을 갖습니다. – Seb
"나쁜 디자인과 같은"빈민증 :) 디자인 선택은 도메인에 대한 지식을 기반으로해야하므로 이러한 선택을 할 수는 없습니다 ... 샘플 프로젝트를 살펴 보겠습니다. 일반적으로 Client는 하나의 집계이며 OrderItems와의 Order는 다른 것입니다. 그것은 귀하의 도메인으로 번역 될 수 있습니다 : TecTacClient는 하나의 집합체이며, 그 레코드를 가진 인 타이틀먼트는 또 다른 집합체입니다. logi : 내 생각에 집계에는 많은 논리가 포함되어서는 안되며 집계 자체의 일관성에 대한 논리 만 포함하면 안됩니다. –
매우 흥미 롭습니다. 집계되지 않은 비즈니스 로직은 어디에 저장합니까? – Seb