responsibility pattern patron diseño chains design-patterns oop chain-of-responsibility

design-patterns - pattern - message chains java



¿Cuáles son los "errores" conocidos con respecto al patrón de cadena de responsabilidad? (2)

Creo que es justo decir que, en general, vale la pena utilizar un patrón de diseño dado si le da más beneficios que costos. Cada patrón introduce un nivel extra de indirección en el código, por lo que es más difícil de seguir, especialmente para los miembros más jóvenes del equipo. Habiendo dicho eso, creo que el patrón de Cadena de Responsabilidad es definitivamente útil si no sabes por adelantado cuáles son las clases que van a hacer el procesamiento (para estar en la cadena), o si reutiliza estas clases en diferentes contextos, crear diferentes cadenas en diferentes escenarios, etc.

En general, creo que es bastante malo sobre-diseñar sus soluciones (porque como dijo la gente nueva tiene problemas para entenderlo), pero hay algunos casos donde los patrones de diseño son muy útiles.

He estado usando el patrón de Cadena de responsabilidad a menudo (3 veces a menudo es para mí) en mi proyecto actual y me pregunto si me he entusiasmado un poco con la solución. Específicamente, he estado usando el proyecto de la cadena Apache Commons. Hasta ahora, he quedado bastante impresionado por cómo ha simplificado una serie de piezas de lógica de aplicación intercambiables en un todo más cohesivo y organizado. Sin embargo, algunas de las personas más nuevas en el proyecto parecen tener dificultades para "obtenerlo". ¿Cuáles son su experiencias con esto? ¿Qué problemas ha encontrado en su implementación?

Hasta ahora, el único problema que he notado es cuando tratas de lidiar con objetos que deben cerrarse. Tener esos objetos almacenados en tu clase Contexto crea un dolor cuando has completado la ejecución de tu cadena. Pude evitar esto usando filtros en lugar de comandos, pero parece un poco intuitivo porque sus declaraciones cercanas a menudo están muy lejos de donde se creó la instancia del objeto.

De todos modos, me encantaría escuchar los pensamientos de algunos desarrolladores que tienen más experiencia que yo con este patrón.

Gracias por adelantado.


Estoy tentado de decir que funciona bien para un problema inespecífico (por ejemplo, el modo de estructura), pero funciona menos para muchos problemas específicos . Los marcos se escriben para que otras personas los utilicen, y usted desea otorgarle al cliente total libertad de implementación. Una vez que sepa exactamente lo que va a hacer para resolver el problema, creo que otras soluciones son mejores.

El peligro del patrón de cadena de responsabilidad es muy similar al del patrón de pizarra; es realmente fácil terminar creando muchas abstracciones que, en su mayoría, no proporcionan valor en la entrega de su objetivo final. Los objetos de comando y los objetos de procesamiento realmente solo forman la lógica de su aplicación, y la está ocultando detrás de una cadena de procesamiento en lugar de colocarla justo al frente, donde está su código más importante. Es mucho más fácil de entender y mantener esto si solo programa un método (o varios métodos) que representa la cadena de procesamiento completa sin las abstracciones de la cadena de procesamiento. La cadena de procesamiento realmente puede ocultar la lógica comercial de su aplicación, y creo que prioriza el artefacto técnico sobre el código comercial.

Así que básicamente reemplazas lo que podría haber sido un código de aplicación muy directo que se lee muy fácilmente con cadenas de procesamiento mucho más abstractas. Usted está haciendo meta-programación. Personalmente, nunca hago más meta-programación, así que tendería a estar de acuerdo con aquellos colegas que no les gusta;)