寻找一些OOAD的报告建议

时间:2009-09-22 16:06:29

标签: php oop inheritance design-patterns ooad

我需要以多种不同的文件格式创建任意数量的报告。大多数格式我都可以使用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 个答案:

答案 0 :(得分:1)

听起来你可以使用Two Step View pattern

基本上,您的报告会在两次传递中呈现。第一遍对您的模型执行报告逻辑,以生成一种原始报告对象。第一轮原始报告包含报告中的所有信息,按报告的需要进行组织和分组。

一旦完成,原始报告将被输入到一个模板中,该模板将其呈现为特定格式(pdf,xls,csv,等等)。第二遍产生报告的字节,可以存储到文件中或通过网络发送。