Un patrón común que veo es lo que se conoce como el Mapperpatrón (que no debe confundirse con el DataMapperque es algo completamente diferente), que toma como argumento algún tipo de fuente de datos "en bruto" (por ejemplo, un ADO.NET DataReadero DataSet) y asigna los campos a propiedades en un objeto de negocio / dominio. Ejemplo:
class PersonMapper
{
public Person Map(DataSet ds)
{
Person p = new Person();
p.FirstName = ds.Tables[0].Rows[0]["FirstName"].ToString();
// other properties...
return p;
}
}
La idea es su Gateway / DAO / Repository / etc. llamará al Mapper antes de que regrese, para que obtenga un objeto comercial rico en comparación con el contenedor de datos subyacente.
Sin embargo, esto parece estar relacionado, si no es idéntico, con el patrón Factory (en el lenguaje DDD, de todos modos), que construye y devuelve un objeto de dominio. Wikipedia dice esto re: la fábrica DDD:
Factory: los métodos para crear objetos de dominio deben delegar a un objeto Factory especializado de manera que las implementaciones alternativas puedan intercambiarse fácilmente.
A partir de esa cita, la única diferencia en la que puedo pensar es que la Fábrica de estilo DDD podría parametrizarse para que pudiera devolver un tipo de objeto especializado si fuera necesario (por ejemplo, BusinessCustomer versus ResidentialCustomer) mientras el "Mapper" está codificado para una clase específica y solo hace traducción.
Entonces, ¿hay alguna diferencia entre estos dos patrones o son esencialmente lo mismo con diferentes nombres?
DataMapperpatrón accedía a la base de datos, mientras que este "Mapper" no se extrae de la base de datos, solo convierte un conjunto de resultados de algún tipo en un objeto.