Подтвердить что ты не робот

Шаблон карт данных

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

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

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

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

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

  • Как перенести необработанные данные TO и FROM из моего класса Customer в mapper без нарушения определенных бизнес-правил? DTO-х?

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

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

Инструмент отображения O/R на самом деле не существует. Я использую базу данных Transactional и требую, чтобы я написал свой собственный шаблон Mapper.

Будут оценены любые идеи и комментарии.

4b9b3361

Ответ 1

Шон я бы ответил на ваши вопросы следующим образом:

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

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

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

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

Ответ 2

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

Ответ 3

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

http://ibatis.apache.org/