Заводской класс — Сохранение объектов

#c# #factory

Вопрос:

У меня есть класс фабрики, который заполняет объекты данными. Я хочу реализовать сохранение из объекта, но не хочу заполнять объект данными бд — глупо ли, чтобы моя фабрика, создающая класс, также сохраняла данные?

т. е.: в моем методе .Save() для объекта я бы назвал Factory.Save(MyObject);

Ответ №1:

Класс factory — это шаблон создания, который помогает создавать новые объекты.

Существуют различные шаблоны, которые имеют дело с сохраняемыми объектами, одним из которых является картограф данных http://martinfowler.com/eaaCatalog/dataMapper.html

Это часто используется в сочетании с репозиторием http://martinfowler.com/eaaCatalog/repository.html

Вы можете использовать эти шаблоны для абстрагирования базы данных от ваших доменных/бизнес-объектов и доступа к ним из приложения для запроса и сохранения объектов.

Таким образом, сопоставитель/хранилище данных отвечает за оба аспекта сохранения (заполнение из базы данных и сохранение обратно в базу данных).

Ответ №2:

Если вас беспокоят данные базы данных в классах — рассматривали ли вы возможность использования O/R mapper?

Это позволит полностью исключить содержимое базы данных из вашего кода и очистить объекты вашего домена.

Может быть, взгляните на NHibernate или активную запись.

Ответ №3:

Нет, это совсем не глупо, на самом деле, именно так все должны это делать. Бизнес-объект не должен содержать никакой логики сохранения.

Кстати, если вы используете C# 3.0, то вы можете даже не беспокоиться о заводском классе. Просто создайте методы расширения. Таким образом, вы все еще можете изолировать свой код сохранения от бизнес-объекта и по-прежнему иметь возможность вызывать MyObject.Save().

Комментарии:

1. У вас есть право голоса только за первую строчку…. Я уже давно пытаюсь убедить людей в этом.

2. Только потом не называйте это фабрикой — вы начнете сбивать с толку людей, которые знают, что такое фабрика.