我正在尝试以正确的方式设计应用程序,它应该
- 从 SQL Server 读取发票数据(根据发票类型进行 2 次查询:销售或采购)
- 处理它(Acme 可能需要比 SugarCorp 更少的字段和不同的格式)
- 输出 txt 或 csv(将来可能会改变)
我发现工厂模式很有帮助,所以根据我的关注准备了一个 UML 图。
每个都InvoiceFactoryProvider
可以生成PInvoice
或SInvoice
(特定于它们)。CreatePInvoice()
并且CreateSInvoice()
应该调用load()
和save()
方法。
如何load()
与 SQLReader 类结合以获取每一行作为PInvoice
对象?和save()
我的IDataWriter
界面。你能提供一些例子/建议吗?
编辑:
在查看了桥接模式的示例后,正如 Atul 所建议的,我使用它为这个问题创建了一个类图,如下所示:
Invoice
SQL 查询可能会有所不同(应用程序可能会从不同的系统加载发票数据 -PollosInvoice
或StarInvoice
)以及它们的处理方式(不同的实现)。
在这种情况下,我将抽象Invoice
从其实现中分离出来,将发票导出到某些软件(AcmeExporter
或SigmaExporter
)。AcmeExporter
并将SigmaExport
根据规范设置它们的字段——从 Invoice 的 DataTable 中获取的交易日期、付款方式、发票类型等。ExportInvoice()
将返回DataTable
所需的数据。InvoiceExporter
也是使用编码和文件格式两个接口。
你怎么看待这件事?它有什么样的缺陷/优势?