Un pattern comune che vedo è quello che è noto come Mapper
pattern (da non confondere con DataMapper
che è tutt'altra cosa), che prende come argomento una sorta di fonte di dati "grezza" (es. un ADO .NET DataReader
o DataSet
) e associa i campi alle 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 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: la fabbrica DDD:
Factory: methods for creating domain objects should delegate to a specialized Factory object such that alternative implementations may be easily interchanged.
Da quella citazione l'unica differenza che potrei pensare è che la Factory in stile DDD potrebbe essere parametrizzata in modo da poter restituire un tipo di oggetto specializzato se necessario (ad esempio BusinessCustomer o ResidentialCustomer) mentre il "Mapper" è impostato per una classe specifica e solo fa la traduzione.
Quindi c'è una differenza tra questi due modelli o sono essenzialmente la stessa cosa con nomi diversi?