Какой шаблон следует использовать для обработки отчетов в инфраструктуру, чтобы разрешить различные представления? - PullRequest
5 голосов
/ 05 мая 2009

Просто начинаю изучать шаблоны. Вот простой вопрос, который у меня есть.

У меня есть объект Report, который содержит Page s, каждый из которых содержит различные ReportElement s (Table, Paragraph, Image) и так далее. Предположим, я хочу создать инфраструктуру для взятия Report и разбивки различных представлений этого Report, таких как документ в формате RTF, документ в формате TeX, документ HTML и т. Д.

Какой шаблон дизайна я здесь ищу?

Ответы [ 4 ]

10 голосов
/ 05 мая 2009

Стратегия Я верю.

Вы можете создать RTFReportGenerator, HtmlReportGenerator и т. Д., Которые все реализуют один и тот же интерфейс IReportGenerator, но каждый конкретный класс реализует метод WriteReport (Report r) по-своему.

1 голос
/ 05 мая 2009

Для группы организованных объектов также применим шаблон Посетитель . Это немного лучше справляется с обходом структур объектов, в зависимости от ваших потребностей вы можете использовать его для других задач, которые должны обрабатывать ваши отчеты как группа.

0 голосов
/ 05 мая 2009

Я бы, вероятно, использовал шаблон Composite для представления дерева элементов отчета, а Visitor (как сказал Харальд), чтобы превратить объект отчета в конкретное конкретное представление.

0 голосов
/ 05 мая 2009

Не ищите конкретный шаблон. Многие модели имеют одинаковую структуру, но разные цели. И в любом случае вам всегда нужно внести некоторые изменения в шаблон, чтобы использовать его в вашем конкретном случае. После изучения шаблонов вы сможете правильно думать об объектах и ​​их взаимосвязи.

Вы можете использовать стратегии для разных представлений, вы можете использовать строитель для создания своего отчета.

И вы также можете использовать что-нибудь попроще. Как сочетание делегирования и наследования (для меня это лучшее решение вашей проблемы). Просто создайте иерархию представлений (BasicView <| - RTFView, TextView ...) и передайте отчет конструктору BasicView. Пусть разные представления обеспечивают разные преобразования данных исходного отчета. </p>

...