Php 建议使用软件设计模式来定义CSV/XML或任何其他格式生成器?

Php 建议使用软件设计模式来定义CSV/XML或任何其他格式生成器?,php,xml,oop,csv,design-patterns,Php,Xml,Oop,Csv,Design Patterns,您好,我正在为我自己的项目编写一个CSV/XML包,我没有在那里使用包,因为在某些情况下,我需要渲染行数超过100.000.000的CSV。所以我认为当数据库查询需要很长时间时,我的基本解决方案不起作用,然后我编写了一个脚本来下载文件并对其进行批处理。它正在工作,我只是想为XML扩展和重新考虑它。如果有一个好的设计模式,那就太好了 这个问题主要是基于意见-我将告诉你我是如何解决这个问题的。 我最近在我的一个项目中遇到了同样的问题,我决定通过编写阅读和写作界面来解决这个问题。 因此,我的代码如下:

您好,我正在为我自己的项目编写一个CSV/XML包,我没有在那里使用包,因为在某些情况下,我需要渲染行数超过100.000.000的CSV。所以我认为当数据库查询需要很长时间时,我的基本解决方案不起作用,然后我编写了一个脚本来下载文件并对其进行批处理。它正在工作,我只是想为XML扩展和重新考虑它。如果有一个好的设计模式,那就太好了

这个问题主要是基于意见-我将告诉你我是如何解决这个问题的。
我最近在我的一个项目中遇到了同样的问题,我决定通过编写阅读和写作界面来解决这个问题。
因此,我的代码如下:

public interface IReportReader
{
    Report ReadFromFile(string filePath);
    Report ReadFromStream(Stream stream);
}

public interface IReportWriter
{
    void WriteToFile(string filePath, Report report);
    void WriteToStream(Stream stream, Report report); 
}
然后,我实现了两个实现:

StubConsoleReportReader
\
StubConsoleReportWriter
-仅用于调试目的。
CSVReportReader
\
CSVReportWriter

后来,我很容易地添加了XML、HTML和word输出格式

对我来说,这种模式非常适合,因为:
1.它简单明了,没有过度工程化,易于扩展

2.这两个接口描述了两个基本操作—输入和输出,它们适合任何现有的文件类型和格式。

在PHP中处理这类主题的几个库正在实现一个标准PHP库(如果需要性能,应该使用该库)与每种类型的文件关联,提供完全不同的接口

因此,事实上,您只需要找到自己的接口(如果您可以识别不同的功能方面,您可以使用许多接口来实现这一点)

PHP中CSV的标准库示例:

文件类型的抽象工具示例:


我同意你的看法,这是一个基于观点的问题。只是在寻找一个好的概念化,使我的代码易于维护和扩展。为了便于扩展,第一个接口作为接口是无用的。这种情况下的方法可以是
getReport
,应该返回Report对象。与作者类似,它应该只写,以便更容易交换。现在,这里建议的接口只包含您通常想要延迟的所有细节(流和字符串)。这个答案应该代表哪种模式仍然是用户在这里回答的秘密,所有共享的是它是一种模式(“这个模式适合”)。我不认为它是一个pttern,它只是促进使用接口。没有模式符合任何其他格式生成器。您必须明确您想要解决的具体问题,以便对模式提出有用的建议。