发票申请的设计建议

时间:2014-05-28 13:24:00

标签: c# oop design-principles

我正在努力为我们公司制作发票管理系统。由于设计原则,我有点困惑。 SOLID

假设一个班级负责发票:InvoiceProcessor

InvoiceProcessor ip=new InvoiceProcessor(DraftHTML);
ip.Customer=theCustomer;
ip.Order=theOrder;
ip.Prepare();

在此之后,哪种方法更好?为什么?

A)

ip.SaveToFile(fileName);
ip.SendToCustomer();

ip.DBConnection=myActiveConnection;
ip.LoadFromDB(invoiceID);
ip.SaveToDB();

B)

SaveToFile(fileName,ip.GetHTML());
SendEmail(ip.Customer,ip.GetHTML());

ip.InvoiceInfo=LoadFromDB(invoiceID);
SaveToDB(ip.InvoiceInfo);

2 个答案:

答案 0 :(得分:4)

Imho,A)和B)打破SRP原则,尽管B)耦合较少。

我会以另一种方式解决这个问题:

  1. 创建一个代表Invoice
  2. 的新类型
  3. InvoiceProcessor返回Invoice
  4. 的实例
  5. 对于每个后期处理步骤,请创建不同类型的操作。
  6. 代码应如下所示:

    var ip = new InvoiceProcessor
    {
        Customer = theCustomer,
        Order = theOrder
    };
    var invoice = ip.CreateInvoice();
    // Post processing
    HtmlPrinter.PrintInvoice(invoice, htmlFileName);
    DataAccess.SaveInvoice(invoice);
    MailService.SendInvoiceToCustomer(invoice, theCustomer.Email);
    

答案 1 :(得分:0)

B选项更好,因为您可以通过各种方式使用您的方法。如果您选择了第一个建议,将来如果您想编写代码,请说明您的发送,那么您必须再次为调度部分编写相同的代码。这将导致代码中的错误模式。您应尽可能避免重复代码。