Объект объекта, чтобы сохранить себя в базу данных, портит сплоченность класса?
Вопрос
Выступая с точки зрения объектно-ориентированного дизайна, думаете ли вы дать функциональность сохранения себя в базе данных в объект, испорченный сплоченность класса?
Представить:
Product p = new Product()
{
Name = "Joy Rider",
Price = 100,
Currency = "USD"
};
Как вы думаете, чтобы сохранить этот продукт P в базе данных, лучше сделать таким образом:
p.Save();
или в некотором смысле что -то вроде этого:
ProductServices.SaveProduct(p);
Что вы думаете?
Решение
Это мешает принципу единой ответственности. Целью класса продукта в вашем примере является представление продукта и операции на этом продукте. Взаимодействие с базой данных не является основной частью ответственности класса.
Наличие класса Productservices увеличивает обслуживание вашего кода. Предположим, что логика сохранения объектов в базе данных было изменение (что может). Вы хотите изменить каждый класс объектов в вашей системе?
Другие советы
Объект, который может сохранить себя в базе данных, будет нарушать SRP (Принцип единственной ответственности).
Постоянство - это само по себе ответственность и должна рассматриваться посвященными классами.
Это было бы в дополнение к низкой сплоченности - члены, которые имеют отношение к настойчивости, не имеют отношения к тем, которые не имеют и не будут использоваться в тех методах класса, которые не имеют отношения к настойчивости.
С точки зрения Объектно -ориентированный дизайн Только тогда нет ничего плохого в том, что метод сохранения является частью Продукт. Отказ На самом деле это был бы предпочтительный метод в мире объектно -ориентированного дизайна. И с чистой точки зрения вы не хотели бы разорваться, потому что это более функционально, чем объект.
Однако, если вы верите в принцип инверсии зависимости, который говорит, что модули высокого уровня не должны зависеть от модулей низкого уровня; Тогда метод сохранения будет подходящим, но он должен принимать абстрактный тип соединения в качестве параметра. Это дало бы вам хорошую объектную модель, которая включает метод сохранения, но она не будет знать тип соединения.