推荐的软件设计模式来定义 CSV/XML 或任何其他格式生成器?
Recommended Software Design Pattern to define CSV/XML or any other format generator?
您好,我正在为我自己的项目编写一个 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 中从事此类主题工作的几个图书馆正在实施 design pattern adapter,因为标准 PHP 图书馆(如果你想要表演,你应该使用)与每种文件提供了一个完全不同的界面。
因此,实际上,您只需要找到自己的接口即可(如果您可以识别不同的功能方面,则可以使用许多接口来做到这一点)。
Example of standard library for CSV in PHP: http://php.net/manual/fr/function.fgetcsv.php
Example of abstraction tool on type of file: https://github.com/KnpLabs/Gaufrette
您好,我正在为我自己的项目编写一个 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 中从事此类主题工作的几个图书馆正在实施 design pattern adapter,因为标准 PHP 图书馆(如果你想要表演,你应该使用)与每种文件提供了一个完全不同的界面。
因此,实际上,您只需要找到自己的接口即可(如果您可以识别不同的功能方面,则可以使用许多接口来做到这一点)。
Example of standard library for CSV in PHP: http://php.net/manual/fr/function.fgetcsv.php
Example of abstraction tool on type of file: https://github.com/KnpLabs/Gaufrette