2010-02-19 11 views
5

Estoy tratando de entender qué es realmente una responsabilidad, así que quiero usar un ejemplo de algo en lo que estoy trabajando actualmente. Tengo una aplicación que importa información del producto de un sistema a otro. El usuario de las aplicaciones puede elegir varias configuraciones para los campos de productos en un sistema que desea usar en el otro sistema.Ayuda para comprender el Principio de Responsabilidad Individual

así que tengo una clase, dicen ProductImporter y de que la responsabilidad es la importación de productos. Esta clase es grande, probablemente demasiado grande.

Los métodos de esta clase son complejos y serían por ejemplo, getDescription. Este método no solo toma una descripción del otro sistema, sino que establece una descripción del producto en función de varias configuraciones establecidas por el usuario. Si tuviera que agregar una configuración y una nueva forma de obtener una descripción, esta clase podría cambiar.

Entonces, ¿son esas dos responsabilidades? ¿Hay alguno que importe productos y uno que obtenga una descripción? Parecería de esta manera, casi todos los métodos que tengo estarían en su propia clase y eso parece exagerado.

que realmente necesitan una buena descripción de este principio, porque es difícil para mí entender por completo. No quiero una complejidad innecesaria.

Respuesta

3

La 'responsabilidad' se define en este principio como una razón para cambiar. En este caso, la única responsabilidad de su clase sería importar productos. Si la forma de importar el producto cambia, entonces la clase debería cambiar.

La intención es evitar tener diferentes cosas que cambian la misma clase al mismo tiempo. Por ejemplo, si su clase de importador de productos también definió su formato de salida, tendría dos responsabilidades, ya que es probable que el formato de salida no esté relacionado con el mecanismo de importación de los datos.

Ahora, que la clase es enorme y que getDescription() también establece una descripción no son una violación directa de la SRP, pero de diferentes principios. Es decir, que usted debe evitar tener grandes clases (muestra una falta de diseño) y cada método debe hacer una sola cosa (lo que sería una especie de versión más concreta de la SRP.)

+0

Es "muestra una falta de Diseño" - Este es el problema que no estoy seguro de cómo corregirlo. Si el método de descripción pertenece a la clase y tengo que dar cuenta de cada variación según las distintas configuraciones, ¿de qué otro modo puede diseñarlo? No veo otra forma. – user204588

+0

Puede tener una clase de descripción, cuya responsabilidad sería manejar la variación. Y así sucesivamente, cuando una sola responsabilidad es demasiado grande, divídala en responsabilidades más pequeñas. –

Cuestiones relacionadas