Pregunta

Hablando en términos de diseño orientado a objetos, ¿cree que para dar una funcionalidad de ahorro de sí mismo en los datos de la base de un botín de objetos de la cohesión de la clase?

Imagínese:

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

¿Cree que para salvar este producto p en base de datos es mejor si se hace de esta manera:

 p.Save();

o de una manera algo como esto:

 ProductServices.SaveProduct(p);

¿Qué opinas?

¿Fue útil?

Solución

No interfiere con el principio de la responsabilidad individual. El propósito de la clase de producto en su ejemplo es para representar un producto y las operaciones para ese producto. La interacción con la base de datos no es una parte fundamental de la responsabilidad de clases.

Tener la clase ProductServices aumenta la capacidad de mantenimiento de su código. Supongamos que la lógica para guardar objetos en la base de datos era cambiar (que puede) qué quiere cambiar cada clase de entidad en su sistema?

Otros consejos

Un objeto que puede salvar a sí mismo a la base de datos violaría SRP (principio de responsabilidad individual).

La persistencia es una responsabilidad por sí mismo y debe ser manejado por las clases dedicadas.

Esto sería además de tener la cohesión BAJA -. Los miembros que tienen que ver con la persistencia no tienen relación con los que no lo hacen y no se pueden utilizar en los métodos de la clase que no se ocupan de la persistencia

En cuanto a la Diseño Orientado a Objetos sólo entonces hay no hay nada malo con el método Save ser parte de Producto . En realidad, sería el método preferido dentro del mundo del diseño orientado a objetos. Y desde una perspectiva OO pura que no le gustaría que descompuesto porque eso es más funcional que objeto.

Sin embargo, si usted cree en la Dependencia Inversion principio que dice módulos de alto nivel no deben depender de los módulos de bajo nivel; a continuación, un método Save sería conveniente pero debe tener un tipo de conexión abstracta como un parámetro. Esto le daría un modelo de objetos que incluye un buen método Save pero no tendría ningún conocimiento del tipo de conexión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top