1

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

  1. 从 SQL Server 读取发票数据(根据发票类型进行 2 次查询:销售或采购)
  2. 处理它(Acme 可能需要比 SugarCorp 更少的字段和不同的格式)
  3. 输出 txt 或 csv(将来可能会改变)

我发现工厂模式很有帮助,所以根据我的关注准备了一个 UML 图。

UML 图

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

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

编辑:

在查看了桥接模式的示例后,正如 Atul 所建议的,我使用它为这个问题创建了一个类图,如下所示:

UML 图 - 桥接模式

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

在这种情况下,我将抽象Invoice从其实现中分离出来,将发票导出到某些软件(AcmeExporterSigmaExporter)。AcmeExporter并将SigmaExport根据规范设置它们的字段——从 Invoice 的 DataTable 中获取的交易日期、付款方式、发票类型等。ExportInvoice()将返回DataTable所需的数据。InvoiceExporter也是使用编码和文件格式两个接口。

你怎么看待这件事?它有什么样的缺陷/优势?

4

1 回答 1

1

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

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

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

在此处输入图像描述

于 2012-11-30T14:17:41.123 回答