C# 结合读写的工厂模式实现
我试图以正确的方式设计应用程序,它应该C# 结合读写的工厂模式实现,c#,oop,design-patterns,factory-pattern,design-principles,C#,Oop,Design Patterns,Factory Pattern,Design Principles,我试图以正确的方式设计应用程序,它应该 从SQL Server读取发票数据(根据发票类型进行2次查询) 发票:销售或采购) 处理它(Acme可能需要的字段比SugarCorp少,格式也不同) 输出txt或csv(将来可能会更改) 我发现工厂模式很有帮助,所以根据我的担心,我预先准备了一个UML图 每个InvoiceFactoryProvider都可以生成PInvoice或SInvoice(特定于它们)CreatePInvoice()和CreateSInvoice()应该调用load()和sav
InvoiceFactoryProvider
都可以生成PInvoice
或SInvoice
(特定于它们)CreatePInvoice()
和CreateSInvoice()
应该调用load()
和save()
方法
如何将load()
与SQLReader类耦合,以将每一行作为PInvoice
对象?使用我的IDataWriter
界面保存()。你能提供一些例子/建议吗
编辑:
根据Atul的建议,在回顾了桥接模式的示例之后,我使用它为这个问题创建了一个类图,如下所示:
Invoice
SQL查询可能会有所不同(应用程序可能会从不同的系统加载发票数据-PollosInvoice
或StarInvoice
),以及它们的处理方式(不同的实现)
在本例中,我将抽象-Invoice
与其实现分离-将Invoice导出到特定软件(AcmeExporter
或SigmaExporter
)AcmeExporter
和SigmaExport
将根据从发票数据表中获取的交易日期、付款方式、发票类型等规范设置其字段ExportInvoice()
将返回带有所需数据的DataTable
InvoiceExporter
还使用两个接口进行编码和文件格式
你觉得怎么样?它有什么样的缺陷/优势 目前,您似乎正在使用抽象工厂设计模式来创建产品(发票)。但需要注意的是,您的加载和保存方法在产品(发票)中,所以最好使用桥接设计模式。您的产品将使用Reader和Writer的实现来加载和保存记录 注意:即使使用此设计模式,您也可以使用AbstractFactory 它看起来像下面这样。。。(打个比方)
目前,您似乎正在使用抽象工厂设计模式来创建产品(发票)。但需要注意的是,您的加载和保存方法在产品(发票)中,所以最好使用桥接设计模式。您的产品将使用Reader和Writer的实现来加载和保存记录 注意:即使使用此设计模式,您也可以使用AbstractFactory 它看起来像下面这样。。。(打个比方)
提交了一份新图表。它与你的答案有多一致?提交了一个新的图表。这与你的答案相符吗?