El último de los Principios del DOO referido a Clases sería el Principio de Segregación de Interfaces (ISP - Interface Segregation Principle) que podría resumirse con la siguiente frase: es preferible tener interfaces específicos para cada cliente que uno de propósito general, o lo que es lo mismo, no deberíamos obligar a los clientes a depender de métodos que no utilizan.
Sin embargo, no seamos más papistas que el papa, cuando hablamos de interfaces específicos para cada cliente no estoy diciendo que cada clase que use a otra clase debe hacerlo a través de un interface específico, si no que deberíamos clasificar y organizar los clientes por tipos, creando interfaces para cada uno de estos tipos. En esta aproximación por tipos de clientes e interfaces debemos tener en cuenta que si varios tipos de cliente necesitan el mismo método, este método debería añadirse a los interfaces correspondientes en vez de unir los diferentes tipos en uno solo.
Finalmente, os dejo una reflexión a tener en cuenta cuando un cambio en un interface provoque un gran impacto de recompilación y redespliegue de gran parte del diseño: para mitigar este impacto podríamos añadir en casos concretos un nuevo interface en vez de cambiar el existente, sin embargo debemos cuidarnos de esta solución o, en todo caso, evitar el abuso de este principio, ya que la segregación por tipo de clientes sumada a la segregación por versiones puede hacer degenerar el diseño añadiendo un exceso de complejidad (y caer en el antipatrón "Gas Factory") al mismo.
No hay comentarios:
Publicar un comentario