Attualmente, i miei aggregati e oggetti valore hanno costruttori protetti e alcuni di essi vengono creati da metodi di factory static all'interno dell'aggregato con nomi descrittivi. Crea un bel DSL e un modello abbastanza incapsulato ma rende il test dell'unità doloroso (se la creazione del modello di dominio fallisce, anche il gestore di servizio / comando verrà contrassegnato come fallito) . L'introduzione dei metodi di fabbrica d'altra parte per ciascuna entità e l'oggetto valore mi obbliga a iniettare un'interfaccia di fabbrica per oggetto entità / valore nel servizio.
È corretto creare un servizio di fabbrica per radice aggregata con un metodo factory per oggetto entità / valore? Ecco un esempio di un servizio factory che crea una radice aggregata aziendale, ed è entità interne / VO:
public class CompanyFactory : ICompanyAggregateRootFactory
{
public Company CreateCompany(...){}
public Employee CreateEmployee(...){}
public CEO CreateCEO(...){}
....
}
Esiste un altro modo in cui viene applicato lo stesso livello di incapsulamento e DSL di chiarezza senza che l'unità si collauda l'una sull'altra?