2010-12-07 4 views
3

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

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

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

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

p.Save(); 

или в пути что-то вроде этого:

ProductServices.SaveProduct(p); 

Как вы думаете?

ответ

5

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

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

8

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

Сохранение ответственности является само по себе и должно осуществляться специализированными классами.

Это было бы в дополнение к тому, чтобы иметь НИЗКОЕ СОГЛАШЕНИЕ - члены, которые имеют отношение к упорству, не имеют никакого отношения к тем, которые не используют и не будут использоваться в тех методах класса, которые не имеют отношения к упорству.

-1

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

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

+0

burak - Вы хотите знать, должен ли быть способ сохранения в продукте? Или вы хотите знать, следует ли переместить его в другой класс ProductServices? – phillip

+0

Если вы спрашиваете о фактической обработке Сохранить в продукте, тогда Oded является правильным и держите его DRY с SRP. Но если вы спрашиваете, следует ли переместить метод в ProductServices, это не является правильным утверждением и должно быть обсуждено немного лучше. – phillip

 Смежные вопросы

  • Нет связанных вопросов^_^