如何在新的C#控制台应用程序中应用OOP原则

时间:2018-11-17 18:41:27

标签: c# oop

我正在尝试找出如何在新的C#控制台应用程序中以最佳方式构造对象,使其符合OOP原则,以便其可重用,可维护,可扩展和可单元测试。

我有以下任务:

  1. 控制台应用程序将从任务计划程序中触发
  2. 它从文件共享中读取xml文件
  3. xml文件包含需要汇总的数字数据
  4. 这种汇总的结果需要通过电子邮件发送给最终用户

对于步骤1和2,我计划创建以下类:

  • FileToStringTransformer(它将从文件共享中读取xml文件的内容,并以字符串形式将其带入应用程序-隔离此类允许我们对其他类进行单元测试,而不必依赖文件共享,还使我们能够灵活地将xml的源位置从磁盘上的文件更改为数据库,而不会影响其他类。

  • StringToXDocumentTransformer(这会将字符串对象更改为XDocument对象)

  • XDocumentToDomainObjectTransformer(这会将XDocument对象映射到域对象,以便于聚集数字数据)

我打算使XDocumentToDomainObjectTransformer对象“具有” StringToXDocumentTransformer,而StringToXDocumentTransformer对象“具有” FileToStringTransformer对象。这样一来,对XDocumentToDomainObjectTransformer对象的单次调用将调用其他两个对象上的方法,以使您不必在将磁盘上的文件转换为域对象的任何地方都将所有这三个类的调用显式编写。

但是我意识到这样做的一个缺点是,您将无法相互隔离地重用这些类-我不能说仅重用XDocumentToDomainObjectTransformer类,因为依赖项树包括其他两个类。为任务的步骤1和2设计对象以使其符合OOP原则的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

您的直觉是您将无法孤立地重用这些类,这是正确的。第二个问题是使您的变压器无状态通常是一个好习惯。

您似乎倾向于的设计模型通常称为“功能编程”。

在该模型下,您将拥有:

  • FileToStringTransformBlock
  • StirngToXDocumentTransformBlock
  • XDocumentToDomainObjectTransformBlock

    您可以按照上述建议在单个管道中链接在一起。

    为了获得最佳实践,我建议使用Dataflow,它有一个非常干净的示例,该示例使用4个链式转换。