Un modèle courant que je vois est ce qu’on appelle le Mapper
modèle (à ne pas confondre avec DataMapper
ce qui est autre chose), qui prend comme argument une sorte de source de données "brute" (par exemple un ADO.NET DataReader
ou DataSet
) et mappe les champs sur propriétés sur un objet métier / domaine. Exemple:
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'idée étant votre passerelle / DAO / référentiel / etc. appelle dans le mappeur avant son retour, vous obtenez donc un objet métier riche par rapport au conteneur de données sous-jacent.
Cependant, cela semble être lié, sinon identique, au modèle Factory (de toute façon dans le langage DDD), qui construit et retourne un objet de domaine. Wikipedia dit ceci: l'usine DDD:
Factory: les méthodes de création d'objets de domaine doivent être déléguées à un objet Factory spécialisé, de sorte que les implémentations alternatives puissent être facilement échangées.
À partir de cette citation, la seule différence à laquelle je pouvais penser est que l’usine de style DDD puisse être paramétrée de manière à renvoyer un type d’objet spécialisé si le besoin s’en faisait sentir (par exemple, BusinessCustomer contre ResidentialCustomer) alors que le "Mappeur" était associé à une classe spécifique. et seulement la traduction.
Y a-t-il une différence entre ces deux modèles ou s'agit-il essentiellement de la même chose avec des noms différents?
DataMapper
modèle d'accès à la base de données lui-même était accessible, alors que ce "mappeur" ne extrait pas de la base de données, mais convertit simplement un ensemble de résultats en un objet.