Обычный шаблон, который я вижу, - это то, что известно как 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;
}
}
Идея заключается в том, что ваш шлюз / DAO / репозиторий / и т.д. вызовет Mapper прежде, чем он вернется, так что вы получите богатый бизнес-объект по сравнению с базовым контейнером данных.
Однако, похоже, это связано, если не идентично, с шаблоном Factory (в любом случае на языке DDD), который создает и возвращает объект домена. Википедия говорит, что это: фабрика DDD:
Фабрика: методы для создания объектов домена должны делегироваться специализированному объекту Фабрики, так что альтернативные реализации могут быть легко взаимозаменяемы.
Из этой цитаты единственное различие, о котором я мог подумать, заключается в том, что можно задавать параметризацию фабрики в стиле DDD, чтобы она могла возвращать объект специального типа, если возникнет такая необходимость (например, BusinessCustomer или ResidentialCustomer), в то время как «Mapper» связан с определенным классом. и только делает перевод.
Так есть ли разница между этими двумя шаблонами или они по сути одно и то же с разными именами?
DataMapperшаблон сделал сам доступ к базе данных, в то время как этот «Mapper» не извлекает базу данных, а просто конвертирует некоторый набор результатов в объект.