Нужны некоторые советы OOAD для отчетности - PullRequest
1 голос
/ 22 сентября 2009

Мне нужно создать произвольное количество отчетов в разных форматах файлов. В большинстве форматов я могу использовать Smarty для шаблона вывода. Однако вывод в Excel и PDF усложняет ситуацию и требует использования FPDF или TCPDF и PHPExcel.

Я пытаюсь найти наилучший способ организации своих занятий с помощью одного или нескольких шаблонов проектирования (если это возможно).

Выходные форматы:

  • Текст - Smarty
  • Текст (с форматированием PCL) - Smarty
  • CSV - Smarty
  • HTML - Smarty
  • Excel - PHPExcel
  • PDF - FPDF / TCPDF

Эти форматы должны быть в памяти для потоковой передачи или записи в файл для последующего использования.

Единственное, что согласуется во всех отчетах, это то, что им нужны данные и вплоть до добавления поддержки PDF и Excel, шаблон. В настоящее время у меня есть класс Report, который имеет абстрактный метод getData (). Каждый подкласс (например, SpecificReport) получает необходимые данные и сохраняет их в свойстве класса для привязки к шаблону и т. Д.

Каждый отчет должен быть доступен во всех форматах.

Класс Report обрабатывает вывод в данный момент, но добавление поддержки Excel и PDF делает это невозможным. Это намного больше, чем просто привязка данных к шаблону, как в Smarty. Каждый отчет требует определенного кода. Я полагаю, я мог бы просто перегрузить эти методы в каждом подклассе отчета.

Кто-нибудь сталкивался с подобной задачей?

1 Ответ

1 голос
/ 05 октября 2009

Звучит так, как будто вы можете использовать Двухступенчатый шаблон .

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

Как только это будет завершено, прото-отчет подается в шаблон, который отображает его в определенном формате (pdf, xls, csv, что угодно) Этот второй проход генерирует байты отчета, которые можно сохранить в файл или отправить по проводам.

...