2011-03-18 43 views
2

在我的工作中,我需要格式化付款文件以便能够与银行进行通信。问题是所有银行都要求采用不同的格式。现在,我们使用模板方法模式[GOF]尝试尽可能将此功能做为泛型,但由于每种格式都重复使用相同的3个类。格式化文件的好方法

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

有没有一种方法可以用几乎相同的信息来格式化一个文件,这种方式比我们现在做的更好?

这个链接应该提供什么,我需要做一个很好的底线:https://www.vancity.com/lang/fr/SharedContent/documents/CPA_Std005_Specs.doc

这是一个.doc!

谢谢!

+0

也许你可以共享代码?或者至少告诉我们你的方法不喜欢什么。否则,不清楚要建议什么。 – Snowbear 2011-03-18 19:20:43

+0

@贾斯汀 - 谢谢。它现在修复了 – 2011-03-18 19:37:10

回答

2

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

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

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

1

我会考虑使用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" } 
    ] 
} 

希望这有助于。

+0

我相信他在格式上受到限制,他需要关于如何设计'格式'代码的建议 – Snowbear 2011-03-18 19:26:59

+0

@Snowbear - 你是对的。 – 2011-03-18 19:34:48

+0

啊,我明白了。对不起,我错过了。 – Joel 2011-03-20 03:08:48

0

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

此外,很容易在这个粒度级别重复使用。如果生成文件格式不是您正在处理的核心内容,则更重要的是要注意更高级别的体系结构,然后重新生成文件的可用性。此外,保持格式化例程彼此隔离可能会有所帮助,因此一种格式的更改不会影响另一种格式。结合单元测试将进一步提高可维护性。

0

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

使MasterFormatFile公开一个通用api,就像获得一个字典的键值,但有一些其他支持。

扩展到新的FileFormatter将会很容易和模块化。