DDD를 사용하여 헬프 데스크 응용 프로그램을 작성 중입니다. 내 질문은 두 가지 가능한 AR을 참조 할 수있는 엔터티를 처리하는 가장 좋은 방법입니다.DDD : 가능한 여러 개의 집계 루트 링크를 처리하는 방법
나는 업데이트 요청을 신청 한 사람인 RequestSubscriber
입니다.
이 가입자는 Agent
또는 Contact
입니다.
질문은 대리인이나 연락처에 대한 선택적 참조가 있어야하며 관련 유형이있는 일반 사람 참조가 있어야 링크가 올바른 위치에 있는지 확인할 수 있습니까?
모델 옵션 :
// This
public class RequestSubscriber : DomainEntity, IPerson
{
// Constuctors...
public Guid? Agent_Id { get; private set; }
public Guid? Contact_Id { get; private set; }
public SubscriberType Type { get; private set; }
public Email Email { get; private set; }
public PersonName Name { get; private set; }
}
// Or This
public class RequestSubscriber : DomainEntity, IPerson
{
// Constuctors...
public Guid Person_Id { get; private set; }
public SubscriberType Type { get; private set; }
public Email Email { get; private set; }
public PersonName Name { get; private set; }
}
Contructors :
// This
public RequestSubscriber(Guid id, Request request, IPerson person) : base(id)
{
Guard.ForNull(request, nameof(request));
Guard.ForNull(person, nameof(person));
if(person is Agent agent)
{
Email = agent.Email;
Name = agent.Name;
Type = SubscriberType.Agent;
}
else if (person is Contact contact)
{
Email = contact.Email;
Name = contact.Name;
Type = SubscriberType.Contact;
}
else
{
throw new ArgumentException("Subscribers must be an agent or contact", nameof(person));
}
request.Subscribe(this);
}
// Or This
public RequestSubscriber(Guid id, Request request, Agent agent) : base(id)
{
Guard.ForNull(request, nameof(request));
Guard.ForNull(agent, nameof(agent));
Email = agent.Email;
Name = agent.Name;
Type = SubscriberType.Agent;
request.Subscribe(this);
}
public RequestSubscriber(Guid id, Request request, Contact contact) : base(id)
{
Guard.ForNull(request, nameof(request));
Guard.ForNull(contact, nameof(contact));
Email = contact.Email;
Name = contact.Name;
Type = SubscriberType.Contact;
request.Subscribe(this);
}
또 다른 생각은 아마도 두 개의 다른 가입자, 즉 에이전트 가입자와 연락 담당자가 있어야한다는 것입니다. –
언급 한 '구독자'클래스가 누락되었습니다. 왜'RequestSubscriber'에'IPerson '이 어떤가가 중요할까요? 해당 AR에 의해 보호되는 불변/일관성 경계는 무엇입니까? –
죄송합니다. 'RequestSubscriber'는 구독자 클래스 이름입니다. 이는 '연락처'에 대한 전자 메일 알림이 '에이전트'와 다르기 때문에 주로 중요합니다. –