Sto costruendo un repository per uno schema CRM di grandi dimensioni con un elevato numero di relazioni tra entità.
Alcune entità sono referenziate da quasi tutte le entità, ad es. Persona e Azienda.
Dove ho una radice aggregata come Order, che indirizza l'intestazione dell'ordine, le righe d'ordine ecc. Nel caso in cui l'ordine provenga da un nuovo cliente, devo inserire contemporaneamente un registro di società e di persona .. Fin qui tutto bene.
La difficoltà è che questa è la situazione con molte altre radici aggregate.
Non voglio avere un metodo privato insertPerson(IPerson)
in ogni singola implementazione del repository.
Ho un repository clienti che ha già il metodo pubblico InsertCustomer(ICustomer)
, che persiste in un'azienda e in un record personale. Ma la mia lettura indica che i repository non dovrebbero dipendere l'uno dall'altro.
Se questo è il caso in cui è giusto che gli archivi dipendano l'uno dall'altro, qual è il modo migliore per farlo? Devo iniettare il Repository clienti nel costone di repository dell'Ordine, passarlo come parametro ai metodi che ne hanno bisogno, o non commettere mai questo male e duplicare il codice identico in tutti i repository, nel caso in cui questi repository necessitino di specializzarlo per il loro specifico contesti?