Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 结合读写的工厂模式实现_C#_Oop_Design Patterns_Factory Pattern_Design Principles - Fatal编程技术网

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

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

  • 从SQL Server读取发票数据(根据发票类型进行2次查询) 发票:销售或采购)
  • 处理它(Acme可能需要的字段比SugarCorp少,格式也不同)
  • 输出txt或csv(将来可能会更改)
  • 我发现工厂模式很有帮助,所以根据我的担心,我预先准备了一个UML图

    每个
    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

    它看起来像下面这样。。。(打个比方)


    提交了一份新图表。它与你的答案有多一致?提交了一个新的图表。这与你的答案相符吗?