Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 寻找一些OOAD报告建议_Php_Oop_Inheritance_Design Patterns_Ooad - Fatal编程技术网

Php 寻找一些OOAD报告建议

Php 寻找一些OOAD报告建议,php,oop,inheritance,design-patterns,ooad,Php,Oop,Inheritance,Design Patterns,Ooad,我需要以多种不同的文件格式创建任意数量的报告。我能够使用Smarty为输出设置模板的大多数格式。但是,输出到Excel和PDF会使事情变得复杂,需要使用FPDF或TCPDF和PHPExcel 我正试图找出通过一个或多个设计模式(如果可能)来组织我的课程的最佳方式 输出格式: 文本智能 文本(带PCL格式)-Smarty CSV-Smarty HTML-Smarty Excel-PHPExcel PDF-FPDF/TCPDF 这些格式需要能够在内存中进行流式处理或写入文件以供以后使用 在所有报

我需要以多种不同的文件格式创建任意数量的报告。我能够使用Smarty为输出设置模板的大多数格式。但是,输出到Excel和PDF会使事情变得复杂,需要使用FPDF或TCPDF和PHPExcel

我正试图找出通过一个或多个设计模式(如果可能)来组织我的课程的最佳方式

输出格式:

  • 文本智能
  • 文本(带PCL格式)-Smarty
  • CSV-Smarty
  • HTML-Smarty
  • Excel-PHPExcel
  • PDF-FPDF/TCPDF
这些格式需要能够在内存中进行流式处理或写入文件以供以后使用

在所有报告中唯一一致的是,在添加PDF和Excel支持之前,它们需要数据和模板。目前我有一个Report类,它有一个名为getData()的抽象方法。每个子类(例如SpecificReport)获取所需的数据,并将其存储在类属性中,以便绑定到模板等

每个报告都需要以所有格式提供

Report类目前正在处理输出,但是添加对Excel和PDF的支持使得这变得不可能。不仅仅是像Smarty那样将数据绑定到模板,还有很多。每个报告都需要特定的代码。我想我可以在每个报表子类中重载这些方法


有人遇到过类似的任务吗?

听起来您可以使用

基本上,您的报告在两个过程中呈现。第一步针对您的模型执行报告逻辑,以生成一种原型报告对象。first pass proto report包含报告中的所有信息,根据报告需要进行组织和分组


完成后,原型报告将被输入到模板中,该模板将其呈现为特定格式(pdf、xls、csv等)。第二步生成报告的字节,这些字节可以存储到文件中,也可以通过网络发送。

听起来您可以使用

基本上,您的报告在两个过程中呈现。第一步针对您的模型执行报告逻辑,以生成一种原型报告对象。first pass proto report包含报告中的所有信息,根据报告需要进行组织和分组


完成后,原型报告将被输入到模板中,该模板将其呈现为特定格式(pdf、xls、csv等)。第二步生成报告的字节,这些字节可以存储到文件中,也可以通过网络发送。

我认为这是一个好模式/想法。最困难的部分是为Excel和PDF格式创建中间阶段。如果我想创建一个ExcelWriter类型的类,将任何模板写入Excel文件或流,我基本上必须为这些标记创建一个标记方案和解释器。我认为这种模式是我最初的想法,但我刚才提到的阻止了它。也许我只是想让事情变得更简单。=)不要使用标签方案和解释器。使中间报告成为对象图。然后让渲染器读取对象的图形并将其转换为报告。在PofEAA中,Fowler说,当屏幕(在我们的例子中是报告)之间几乎没有共同点时,这种模式不起作用。这在这里适用吗?报表数据都是一样的,但是我很难想象一个中间状态(对象图),它可以用来创建完全独立的输出,而不使用特定于该报表的代码。proto report对象似乎在PDF和Excel格式之间有足够的差异。我真的很喜欢这个想法,我只是想弄清楚它是如何为我工作的。我想这取决于同一份报告的PDF和Excel版本之间的差异有多大,尽管我有一些创造性,但我认为这是可以做到的。例如,我必须制作同一份报告的Excel和Crystal Reports版本。Crystal版本有分组、标题、排序和摘要行。Excel版本将每个数据行的每一列都放在一个巨大的网格中,用作数据透视表的源。从视觉上看,这些报告大不相同,但在抽象意义上,它们几乎是一样的。我认为这绝对是值得思考和尝试的。我得戴上我最会思考的帽子。谢谢我认为这是一个好的模式/想法。最困难的部分是为Excel和PDF格式创建中间阶段。如果我想创建一个ExcelWriter类型的类,将任何模板写入Excel文件或流,我基本上必须为这些标记创建一个标记方案和解释器。我认为这种模式是我最初的想法,但我刚才提到的阻止了它。也许我只是想让事情变得更简单。=)不要使用标签方案和解释器。使中间报告成为对象图。然后让渲染器读取对象的图形并将其转换为报告。在PofEAA中,Fowler说,当屏幕(在我们的例子中是报告)之间几乎没有共同点时,这种模式不起作用。这在这里适用吗?报表数据都是一样的,但是我很难想象一个中间状态(对象图),它可以用来创建完全独立的输出,而不使用特定于该报表的代码。proto report对象似乎在PDF和Excel格式之间有足够的差异。我真的很喜欢这个想法,我只是想弄清楚它是如何为我工作的。我想这取决于同一份报告的PDF和Excel版本之间的差异有多大,尽管我有一些创造性,但我认为这是可以做到的。例如,我必须制作同一份报告的Excel和Crystal Reports版本。Crystal版本有分组、标题、排序和摘要行。Excel版本的每个数据行的每一列都在一个巨大的网格中