Un modello comune che vedo è quello che è noto come Mapper
modello (da non confondere con DataMapper
qualcos'altro completamente), che prende come argomento una sorta di origine dati "grezza" (ad esempio un ADO.NET DataReader
o DataSet
) e mappa i campi su proprietà su un oggetto business / dominio. Esempio:
class PersonMapper
{
public Person Map(DataSet ds)
{
Person p = new Person();
p.FirstName = ds.Tables[0].Rows[0]["FirstName"].ToString();
// other properties...
return p;
}
}
L'idea è il tuo Gateway / DAO / Repository / ecc. chiamerà nel Mapper prima che ritorni, in modo da ottenere un oggetto business ricco rispetto al contenitore di dati sottostante.
Tuttavia, questo sembra essere correlato, se non identico, al modello Factory (nel linguaggio DDD, comunque), che costruisce e restituisce un oggetto dominio. Wikipedia dice questo riguardo: la fabbrica DDD:
Factory: i metodi per la creazione di oggetti di dominio devono essere delegati a un oggetto Factory specializzato in modo tale che le implementazioni alternative possano essere facilmente scambiate.
Da quella citazione l'unica differenza che mi viene in mente è che la Factory in stile DDD potrebbe essere parametrizzata in modo da poter restituire un tipo di oggetto specializzato in caso di necessità (ad es. BusinessCustomer contro ResidentialCustomer) mentre "Mapper" è impostato su una classe specifica e fa solo la traduzione.
Quindi c'è una differenza tra questi due modelli o sono essenzialmente la stessa cosa con nomi diversi?
DataMapper
modello permettesse al database di accedere da solo, mentre questo "Mapper" non viene estratto dal database, ma converte un set di risultati di qualche tipo in un oggetto.