嗨,我正在为自己的项目编写一个CSV/XML包,我没有在那里使用包,因为在某些情况下,我需要渲染行数超过100.000.000的CSV。所以我认为当数据库查询需要很长时间时,我的基本解决方案不起作用,然后我写了一个脚本来下载文件批处理它。它起作用了,我只想为XML扩展并重新考虑它。如果有一个好的设计模式,那就太好了。
在PHP中处理这类主题的几个库正在实现一个设计模式适配器,因为与每种文件相关联的标准PHP库(如果需要性能,应该使用(提供了完全不同的接口。
所以,事实上,你只需要找到自己的接口(如果你能识别不同的功能方面,你可以用许多接口来做到这一点(。
PHP中CSV的标准库示例:http://php.net/manual/fr/function.fgetcsv.php
关于文件类型的抽象工具示例:https://github.com/KnpLabs/Gaufrette
这个问题主要是基于意见的——我会告诉你我是如何解决这个问题的
我最近在我的一个项目中遇到了同样的问题,我决定通过编写读写接口来解决这个问题
结果,我得到了一个代码:
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和单词输出格式。
就我而言,这种模式非常适合,因为:
1.简单明了,不需要过多的工程设计,易于扩展
2.这两个接口描述了两个基本操作——输入和输出,它们适合任何现有的文件类型和格式。