#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. Только потом не называйте это фабрикой — вы начнете сбивать с толку людей, которые знают, что такое фабрика.