我看到的一个常见模式就是所谓的Mapper
模式(不要与之DataMapper
完全混淆),它以某种“原始”数据源(例如ADO.NET DataReader
或DataSet
)作为参数,并将字段映射到业务/域对象上的属性。例:
class PersonMapper
{
public Person Map(DataSet ds)
{
Person p = new Person();
p.FirstName = ds.Tables[0].Rows[0]["FirstName"].ToString();
// other properties...
return p;
}
}
这个想法是您的Gateway / DAO / Repository / etc。将在Mapper返回之前调用它,因此您将获得一个丰富的业务对象与基础数据容器。
但是,这似乎与工厂模式有关(即使不完全相同),工厂模式会构造并返回域对象。维基百科说这是:DDD工厂:
工厂:用于创建域对象的方法应委托给专门的工厂对象,以便可以轻松地互换替代实现。
从该引用中,我唯一想到的区别是可以对DDD样式的工厂进行参数化,以便在需要将“映射器”键入特定类的情况下,如果需要的话可以返回一种特殊类型的对象(例如BusinessCustomer与ResidentialCustomer)。并且只翻译。
那么这两种模式之间是否存在差异,或者它们本质上是相同的东西却具有不同的名称?
DataMapper
模式是数据库自己访问的,而这个“映射器”不是从数据库中提取的,只是将某种结果集转换为对象。