2009-05-05 5 views
5

Empezando a aprender patrones. Aquí hay una pregunta simple que tengo.¿Qué patrón debo usar para procesar informes en una infraestructura para permitir varias representaciones?

I tienen un objeto Report que contiene Page s, cada uno de los cuales contiene varios ReportElement s (Table, Paragraph, Image) y así sucesivamente. Supongamos que yo quiero crear una infraestructura para tomar una Report y escupiendo varias representaciones de este Report como un documento con formato RTF, un documento TeX-formateado, un documento HTML, etc.

¿Qué patrón de diseño que estoy buscando aquí ?

Respuesta

10

Strategy Creo.

Puede crear un RTFReportGenerator, un HtmlReportGenerator, etc ... que implementen la misma interfaz 'IReportGenerator', pero cada clase concreta implementa el método 'WriteReport (Report r)' de una manera diferente.

+0

Cada "Generador" individual puede ser un Constructor. http://en.wikipedia.org/wiki/Builder_pattern –

+0

Hmm, creo que el 'objeto' (Informe) ya se ha creado; el 'Generador' debería simplemente 'generar' un archivo que contenga una representación RTF/HTML/... de la instancia del Informe que se haya dado. –

+0

"El generador debería ..." De acuerdo, el punto es que los patrones anidan y se superponen. Raramente hay un patrón único para este tipo de cosas. –

0

No busque el patrón concreto. Muchos patrones tienen la misma estructura pero diferentes objetivos. Y de todos modos siempre tienes que hacer algunos cambios en el patrón para usarlo en tu caso concreto. Después de aprender patrones podrá pensar correctamente sobre los objetos y su relación.

Puede usar estrategias para diferentes representaciones, puede usar el generador para crear su Informe.

Y también puede usar algo más simple. Como combinación de delegación y herencia (para mí es la mejor solución para tu problema). Simplemente cree una jerarquía de representaciones (BasicView < | - RTFView, TextView ...) y pase el informe al constructor de BasicView. Permita que diferentes vistas proporcionen diferentes transformaciones de datos del Informe original.

1

Para un grupo de objetos organizados, el patrón Visitor también es aplicable. Esto funciona un poco mejor con el cruce de estructuras de objetos, dependiendo de sus necesidades puede usarlo para otras tareas que necesitan tratar sus informes como grupo.

0

Probablemente usaría el patrón Compuesto para representar el árbol de elementos de informe, y Visitante (como dijo Harald) para convertir el objeto de informe en una representación concreta específica.

Cuestiones relacionadas