【问题标题】:Good ways to format a file格式化文件的好方法
【发布时间】:2011-03-18 19:14:14
【问题描述】:

在我的工作中,我需要格式化付款文件以便能够与银行沟通。问题是所有银行都要求不同的格式。现在,我们使用模板方法模式 [GOF] 来尝试尽可能泛型地做到这一点,但结果是相同的 3 个类对每种格式都重复。

从 asbtract absPaymentFile 继承的类(控制反转) 从 Payment 继承的类(包含有关付款的信息,有时具有 1 或 2 个与其他付款类不同的属性) 从 absMerchant 继承的类(包含有关商家的信息和一些要实现的方法)

有没有办法用“几乎”相同的信息来格式化文件,在几个方面比我们现在做的更好?

此链接应该为您提供我需要做的事情的良好基线:https://www.vancity.com/lang/fr/SharedContent/documents/CPA_Std005_Specs.doc

这是一个.doc!

谢谢!

【问题讨论】:

  • 也许你可以分享代码?或者至少告诉我们你不喜欢你的方法。否则不清楚该建议什么。

标签: c# design-patterns file-format


【解决方案1】:

在尝试制作一些只需要稍作调整即可支持多种格式的东西之后,我会说不要。 DRY 原则在这里并不真正适用,因为每种新格式都真正独立于其他格式,并且可能会发生变化。

是的,这可能意味着复制/粘贴大量代码,但老实说,一旦完成一种格式,您就不必担心它,直到接收软件更新其规范。此外,如果该格式发生更改,您通常不希望任何这些更改影响您的其他输出代码。

简而言之,这是应该只封装到具有某种类型的插件架构的领域之一。这意味着,所有类都应该实现一个基本接口,该接口简单地定义了您的主应用程序将如何向其传输数据。之后,这些类应该能够彼此显着不同,并且一个中的更新应该对其他类没有影响。

【讨论】:

    【解决方案2】:

    我会考虑使用 C# 库支持的格式,例如 XML 或 JSON,这样您在读取或写入文件时就不必重新发明轮子。上述两种格式都允许您拥有可选属性。例如

    <elements>
        <element name="name1" value1="somevalue" company1specific="something" />
        <element name="name1" value1="somevalue" specificToAnotherCompany="something" />
    </element>
    

    {
        "elements" : [
            { "name":"name1", "company1specific":"something" },
            { "name":"name1", "specificToAnotherCompany":"something" }
        ]
    }
    

    希望这会有所帮助。

    【讨论】:

    • 我相信他在格式方面受到限制,他需要有关如何设计“格式化”代码的建议
    • 啊,我明白了。对不起,我错过了。
    【解决方案3】:

    如果正在使用平面文件格式,请查看此库:http://www.filehelpers.com/。该库将允许您使用具有类和成员属性的类来表示格式。

    此外,在这种粒度级别上重复使用很容易让人忘乎所以。如果生成文件格式不是您工作的核心,那么关注更高级别的体系结构比文件生成中的可重用性更重要。此外,保持格式化例程彼此隔离可能会有所帮助,这样一种格式的更改不会影响另一种格式。结合单元测试将进一步提高可维护性。

    【讨论】:

      【解决方案4】:

      您需要一个内部“主格式”,然后是一个 DocumentConverter,它接受 MasterFormatFile 并将其转换为所需的输出。

      使 MasterFormatFile 公开一个通用 api,几乎就像一个 get key-value 作为字典,但有一些其他支持。

      扩展到新的 FileFormatter 将变得简单且模块化。

      【讨论】:

        猜你喜欢
        • 2010-09-08
        • 2011-02-20
        • 1970-01-01
        • 1970-01-01
        • 2019-03-03
        • 1970-01-01
        • 1970-01-01
        • 2016-03-05
        • 1970-01-01
        相关资源
        最近更新 更多