Объект объекта, чтобы сохранить себя в базу данных, портит сплоченность класса?

StackOverflow https://stackoverflow.com/questions/4378098

Вопрос

Выступая с точки зрения объектно-ориентированного дизайна, думаете ли вы дать функциональность сохранения себя в базе данных в объект, испорченный сплоченность класса?

Представить:

Product p = new Product() 
          {
           Name = "Joy Rider", 
           Price = 100, 
           Currency = "USD"
          };

Как вы думаете, чтобы сохранить этот продукт P в базе данных, лучше сделать таким образом:

 p.Save();

или в некотором смысле что -то вроде этого:

 ProductServices.SaveProduct(p);

Что вы думаете?

Это было полезно?

Решение

Это мешает принципу единой ответственности. Целью класса продукта в вашем примере является представление продукта и операции на этом продукте. Взаимодействие с базой данных не является основной частью ответственности класса.

Наличие класса Productservices увеличивает обслуживание вашего кода. Предположим, что логика сохранения объектов в базе данных было изменение (что может). Вы хотите изменить каждый класс объектов в вашей системе?

Другие советы

Объект, который может сохранить себя в базе данных, будет нарушать SRP (Принцип единственной ответственности).

Постоянство - это само по себе ответственность и должна рассматриваться посвященными классами.

Это было бы в дополнение к низкой сплоченности - члены, которые имеют отношение к настойчивости, не имеют отношения к тем, которые не имеют и не будут использоваться в тех методах класса, которые не имеют отношения к настойчивости.

С точки зрения Объектно -ориентированный дизайн Только тогда нет ничего плохого в том, что метод сохранения является частью Продукт. Отказ На самом деле это был бы предпочтительный метод в мире объектно -ориентированного дизайна. И с чистой точки зрения вы не хотели бы разорваться, потому что это более функционально, чем объект.

Однако, если вы верите в принцип инверсии зависимости, который говорит, что модули высокого уровня не должны зависеть от модулей низкого уровня; Тогда метод сохранения будет подходящим, но он должен принимать абстрактный тип соединения в качестве параметра. Это дало бы вам хорошую объектную модель, которая включает метод сохранения, но она не будет знать тип соединения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top