2011-10-22 21 views

Respuesta

88

Un decorador es más que un "vamos a agregar alguna funcionalidad a esta entidad". Un presentador es más un "construyamos un puente entre el modelo/backend y la vista". El patrón del presentador tiene varias interpretaciones.

Los decoradores son genéricos/de propósito general. Los presentadores tienen una gama más limitada de responsabilidades/usos. Los decoradores se utilizan en todos los dominios, los presentadores casi siempre están relacionados con la funcionalidad de visualización.

+3

Gracias. Parece que la gema Draper es un híbrido de presentador y decorador. – keruilin

+16

@keruilin Una cosa a tener en cuenta: los decoradores realmente deberían poder decorar otros decoradores (así como también decorar el objeto componente), porque uno de sus propósitos es evitar las limitaciones de la herencia. (Draper no * hace * esto). El patrón del decorador es muy similar al patrón compuesto en ese sentido, excepto que se maneja desde afuera hacia adentro en lugar de desde adentro hacia afuera (si tiene sentido). – Smudge

+5

Veo un decorador como un patrón de propósito general, y el presentador como una aplicación específica de decorador relacionado con la capa de vista. – Kris

29

sugiero que revise esta - Exhibit vs Presenter.

Decorador es un patrón de diseño que se utiliza para extender la funcionalidad de un objeto específico envolviéndolo, sin afectar otras instancias de ese objeto. En general, el patrón de decorador es un ejemplo de open/close principle (la clase está cerrada por modificaciones, pero está disponible para extensiones).

Tanto los patrones de exposición como los de presentador son una especie de patrón de decorador.

+0

+1 para vincular a esa publicación de blog de Mike Pack. Excelente publicación que explica las diferencias entre los patrones. – ki4jnq

+0

+1 por mencionar el patrón de Exhibit. Terminé recibiendo el libro de Avdi Grimm que lo explica. Aunque, no era la solución correcta para mi problema, sigue siendo un patrón sorprendente. Excelente comida para pensar. – Yonk