【问题标题】:Recommended Software Design Pattern to define CSV/XML or any other format generator?推荐的软件设计模式来定义 CSV/XML 或任何其他格式生成器?
【发布时间】:2015-08-17 09:26:56
【问题描述】:

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

【问题讨论】:

  • 没有模式符合任何其他格式生成器。您必须明确您想要解决的具体问题,以便对模式提出有用的建议。

标签: php xml oop csv design-patterns


【解决方案1】:

在 PHP 中处理此类主题的几个库正在实现 design pattern adapter,因为与每种文件相关联的标准 PHP 库(如果您想要性能,您应该使用它)提供完全不同的接口。

所以,事实上,您只需要找到自己的界面(如果您可以识别不同的功能方面,您可以使用许多界面来做到这一点)。

PHP 中 CSV 标准库示例:http://php.net/manual/fr/function.fgetcsv.php

文件类型的抽象工具示例:https://github.com/KnpLabs/Gaufrette

【讨论】:

    【解决方案2】:

    这个问题主要是基于意见的 - 我会告诉我是如何解决这个问题的。
    我最近在我的一个项目中遇到了同样的问题,我决定通过编写读写接口来解决这个问题。
    结果,我有一个类似的代码:

    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. 这两个接口描述了两个基本操作 - 输入和输出,它们适合任何现有的文件类型和格式。

    【讨论】:

    • 我同意你的观点,这是一个基于意见的问题。只是寻找一个好的概念化来使我的代码可维护且易于扩展。
    • 为了方便扩展,第一个接口作为接口没用。这种情况下的方法可能只是 getReport 并且应该返回 Report 对象。与作家类似,它应该只写,以便更容易交换。现在这里建议的接口只包含您通常想要推迟的所有细节(流和字符串)。此外,这个答案应该代表哪种模式仍然是用户在这里回答的秘密,所有共享的是它是一个模式(“这个模式适合”)。我认为它根本不是 pttern,它只是促进使用接口。
    猜你喜欢
    • 2023-03-05
    • 2013-08-20
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多