工厂模式实现加上读写

时间:2012-11-29 01:23:05

标签: c# oop design-patterns factory-pattern design-principles

我正在尝试以正确的方式设计应用程序,它应该

  1. 从SQL Server读取发票数据(2个查询取决于类型 发票:销售或购买)
  2. 处理它(Acme可能需要比SugarCorp更少的字段和不同的格式)
  3. 输出txt或csv(将来可能会改变)
  4. 我发现工厂模式很有用,所以根据我的关注准备了一个UML图。

    UML diagram

    每个InvoiceFactoryProvider都可以生成PInvoiceSInvoice(特定于他们)。 CreatePInvoice()CreateSInvoice()应调用load()save()方法。

    如何将load()与SQLReader类耦合以将每一行作为PInvoice对象? save()使用我的IDataWriter界面。你能提供一些例子/建议吗?

    修改

    在审查了Bridge Pattern的示例之后,正如Atul建议的那样,我使用它创建了这个问题的类图,如下所示:

    UML diagram - Bridge Pattern

    Invoice SQL查询可能会有所不同(应用程序可能会加载来自不同系统的发票数据 - PollosInvoiceStarInvoice)以及它们的处理方式(不同的实现方式)。

    在这种情况下,我将抽象 - Invoice从其实现中解耦 - 将发票导出到某些软件(AcmeExporterSigmaExporter)。 AcmeExporterSigmaExport将根据规格设置字段 - 交易日期,付款方式,发票类型等,取自Invoice的DataTable。 ExportInvoice()将返回DataTable所需的数据。 InvoiceExporter也使用两个接口进行编码和文件格式化。

    你怎么看?它有什么样的缺陷/优点?

1 个答案:

答案 0 :(得分:1)

目前看起来您正在使用抽象工厂设计模式来创建产品(发票)。但需要注意的是,您的加载和保存方法都在产品(发票)内部,因此最好使用Bridge Design Pattern。您的产品将使用Reader and Writer的实现来加载和保存记录。

注意:即使使用此设计模式,您也可以使用AbstractFactory。

它看起来像下面......(只是一个类比)

enter image description here