Шаблон сопоставления данных - PullRequest
19 голосов
/ 16 октября 2008

До сих пор я использовал активные записи во всех моих приложениях, управляемых базой данных c #. Но теперь мое приложение требует, чтобы мой постоянный код был отделен от моих бизнес-объектов. Я прочитал много постов о шаблоне отображения данных Мартина Фаулера, но мои знания об этом шаблоне все еще очень ограничены.

Давайте использовать следующий пример:

Если у меня есть 2 таблицы - Customer и CustomerParameters. Таблица CustomerParameters содержит значения клиента по умолчанию для создания нового клиента.

Затем мне нужно будет создать класс CustomersMapper для обработки всей персистентности Customer. Мои классы Customer и CustomersList будут сотрудничать с этим классом сопоставления для сохранения данных о клиентах.

У меня есть следующие вопросы:

  1. Как бы я перенес необработанные данные в мой класс Customer и из класса Customer в маппер без нарушения определенных бизнес-правил? DTO-х?

  2. Допустимо ли иметь метод SaveAll и LoadAll в моем классе Mapper для обновления и загрузки данных нескольких клиентов? Если да, то в случае SaveAll, как маппер узнает, когда обновлять или вставлять данные?

  3. Будет ли класс сопоставления Customer отвечать за извлечение значений по умолчанию из таблицы CustomerParameters или будет лучше создать сопоставитель CustomerParameters?

Инструмент O / R mapper здесь не совсем. База данных, которую я использую, является транзакционной и требует, чтобы я написал свой собственный шаблон Mapper.

Любые идеи и комментарии будут с благодарностью.

Ответы [ 3 ]

11 голосов
/ 09 марта 2009

Шон, я бы ответил на ваши вопросы так:

объявление 1) Mapper отвечает за создание объекта Customer. Ваш объект Mapper будет иметь что-то вроде метода RetrieveById (например). Он примет ID и каким-то образом (это не ответственность объекта Mapper) создаст действительный объект Customer. То же самое верно и с другой стороны. Когда вы вызываете метод Mapper.Update с допустимым объектом Customer, объект Mapper отвечает за обеспечение того, чтобы все соответствующие данные были сохранены (при необходимости - дБ, память, файл и т.

ad 2) Как я уже отмечал выше, методы retrieve / persist являются методами объекта Mapper. Это является обязанностью предоставить такую ​​функциональность. Поэтому LoadAll, SaveAll (возможно, передающие массив объектов значений) являются допустимыми методами Mapper.

объявление 3) Я бы сказал, да. Но вы можете разделить различные аспекты объектов Mapper на отдельные классы (если вам это нужно / нужно): значения по умолчанию, проверка правил и т. Д.

Надеюсь, это поможет. Я действительно предлагаю / рекомендую вам прочитать книгу Мартина Фаулера Шаблоны архитектуры корпоративных приложений .

0 голосов
/ 09 марта 2009

Вы можете проверить iBATIS.NET как альтернативу NHibernate. Это также инструмент O / R, но я нашел, что его немного легче использовать, чем NHibernate.

http://ibatis.apache.org/

0 голосов
/ 16 октября 2008

Я бы посоветовал вам взглянуть на инструмент O / R-mapper, прежде чем пытаться реализовать шаблон Data Mapper самостоятельно. Это сэкономит вам много времени. Популярным выбором O / R-mapper является NHibernate .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...