Sono molto nuovo a Domain-Driven Design. Mi sono imbattuto in una parte di un dominio che non sono sicuro di aver modellato nel modo migliore possibile.
Esiste un'entità Membership
che ha un tipo di appartenenza.
public enum MembershipType
{
TypeA,
TypeB,
TypeC,
TypeD,
}
Ogni Membership
può avere 1 o qualche Businesses
(max 2). TypeA
, TypeB
e TypeC
avranno sempre solo l'1% diBusiness
, ma TypeD
deve avere 2 aziende. a causa di questo requisito, ho finito per avere un IList<Business>
nell'entità Membership
come segue e ho un metodo chiamato AddBusinesses
che accetta una matrice di attività commerciali. In parole semplici, MembershipType
enum
cambia il comportamento dell'entità Membership
e non sono sicuro di averlo modellato nel miglior modo possibile o se c'è un modo migliore per affrontarlo.
public class Membership
{
public MembershipType MembershipType {get; protected set;}
private IList<Business> _businesses;
public IReadOnlyList<Business> Businesses => _businesses;
public Membership(MembershipType membershipType)
{
MembershipType = membershipType;
}
public void AddBusinesses(param Business[] businesses)
{
if(MembershipType == MembershipType.TypeD && businesses.Length != 2)
throw new InvalidOperationException("Membership Type D require 2 businesses");
else if(businesses.Length != 1)
throw new InvalidOperationException($"MembershipType {MembershipType} require 1 business");
foreach(var business in businesses)
{
_businesses.Add(business);
}
}
}
Il MembershipType
non cambierà quasi mai, e se cambia, sarà solo un nuovo MembershipType
piuttosto che una modifica a uno esistente.
Qualsiasi aiuto molto apprezzato.
Aggiorna
Grazie a tutti, per aver dedicato del tempo a rispondere alla mia domanda. Ho imparato molto dalle tue risposte. Penso che omettere parte del dominio in questa domanda sia stato un errore che ho fatto (mi dispiace).
Che cosa succede se un'entità Business
non ha alcun significato senza Membership
. Ad esempio, non posso costruire un Business
senza aver prima costruito un Membership
. C'è un invariato in Business che dipende dal Membership.MembershipType
chiamato BusinessType
.