Nell'applicazione DDD, so che Domain Factory dovrebbe essere il singolo punto di creazione dell'oggetto Dominio (input dall'interfaccia utente, i risultati delle query di persistenza) - ma sto affrontando un problema che per query molto complesse, usiamo stored procedure con più insiemi di dati - quindi i dati sono tradotti in strutture (classi) altamente dipendenti dall'implementazione della persistenza, ad esempio
var reader = command.ExecuteReader();
... processing many record sets
reader.NextResult();
var userRows = ((IObjectContextAdapter)_context).ObjectContext
.Translate<UserRow>(reader).ToList();
In questo caso, userRows contiene una tabella di utenti rilevanti (solo poche colonne rilevanti da una tabella altrimenti molto complessa). E fino al punto - fino ad ora, usiamo la classe statica DomainModelHelper
definita in DAL, che in questo caso, ad es. da ID
(ottenuto dalla diversa tabella nella stessa query) e userRows
crea l'oggetto dominio UserInfo
(che contiene le informazioni di base sull'utente), ad es.
// here we create aggregate root
...
foreach (var something in somethingRows)
{
var createdBy = DomainModelHelper.CreateUserInfo(something.CreatedById ?? 0, userRows)
...
// add this domain object to aggregate root
}
Questo può funzionare, ma per qualche ragione, questo non sembra giusto. C'è qualche altro - migliore - schema o approccio di cui sono a conoscenza?