Поширений зразок, який я бачу, - це відомий як 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, перш ніж він повернеться, тому ви отримаєте багатий бізнес-об'єкт порівняно з базовим контейнером даних.
Однак це, мабуть, пов’язано, якщо не ідентично, з заводською схемою (у будь-якому разі, мова йде про DDD), яка будує та повертає об’єкт домену. Вікіпедія говорить про це: завод DDD:
Фабрика: методи створення об’єктів домену повинні бути делеговані спеціалізованому об'єкту Factory таким чином, що альтернативні реалізації можуть бути легко замінені.
З цієї цитати я міг би думати лише про те, що Фабрика стилю DDD може бути параметризована, щоб вона могла повернути спеціалізований тип об'єкта, якщо виникне потреба (наприклад, BusinessCustomer проти ResidentialCustomer), тоді як "Mapper" введений у певний клас і лише переклад.
Так чи є різниця між цими двома візерунками чи вони по суті одне й те саме з різними назвами?
DataMapper
шаблоном був доступ до бази даних сам, тоді як цей «Mapper» не витягує з бази даних, а просто перетворює набір результатів у об’єкт.