【问题标题】:Designing a writer for different file formats in C# (interface vs. class vs. abstract class)在 C# 中为不同的文件格式设计编写器(接口 vs. 类 vs. 抽象类)
【发布时间】:2013-06-18 21:09:27
【问题描述】:

在 C# 应用程序中,我有一个这样的字符串数组:

string[] myArray = GetStrings(source);

现在我想将此数组的内容写入不同格式的文件,例如

  • 平面列表
  • CSV
  • XML
  • ...

但是,我不确定实现这些不同格式的最适当方式是什么。我能想到:

  1. 每种格式一个类,每个类都有一个Write() 方法:
    • FlatListWriter
    • CsvWriter
    • XmlWriter
  2. 一个类包含多个方法:
    • WriteAsFlatList()
    • WriteAsCsv()
    • WriteAsXml()
  3. 一个带有Write() 方法的接口及其实现类,如1。
  4. 某种抽象类。

你会推荐什么?

【问题讨论】:

  • 您错过了对象以所需格式保存自己的接口选项(无论是 csv、xml、edifact、ansi x12 还是其他格式)...
  • @RowlandShaw 你能提供一个链接吗?你的评论听起来很有趣,但我不知道从哪里开始。
  • 更多的是当你有一个对象集合而不是字符串的情况 - 本质上,它是“建模数据,而不是文件格式”的情况 - 你的字符串集合 可能 代表一个发票行,因此最好将其建模为一个发票行,可以巧妙地了解它的持久性,并提供一种更通用的方法,而不是希望在保存为 CSV 时所有字符串数组都代表发票行,例如。

标签: c# interface abstract-class


【解决方案1】:

您的所有选择看起来都合理且同样出色。选择应基于系统的其他要求。

如果您以后想添加格式,并且要多人编写它们,那么每个编写器一个类似乎是一个更好的选择,因为它们会更好地分开,您可以动态加载它们并独立测试。

如果您想从某个 powershell 脚本中调用这些方法,同一类中的多个静态方法可能是更简单、更方便的解决方案。

【讨论】:

  • 因为它是一个非常小的工具,我认为除了我之外不会有很多人会扩展它 :-) 所以我认为你对第二个选项的提示看起来很合理。
【解决方案2】:

尽管从个人经验来看它是一个小工具,但我发现最好将这些东西分成自己的类。如果您需要添加一些功能,它将为您节省一些时间。

它还为更好的单元测试做好了准备,这是我在编写的几乎所有工具中都采用的最佳实践。它可以带来更好的代码并节省我测试应用程序的时间,如果您编写联合测试,每个编写器的单独类将在这方面为您提供帮助。阅读Roy Osherove's Blog 了解更多关于此的提示。

希望这个建议对您有所帮助。

【讨论】:

    猜你喜欢
    • 2010-10-29
    • 2014-10-09
    • 2019-05-29
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 2017-03-15
    • 2011-09-02
    • 2011-07-14
    相关资源
    最近更新 更多