我正在努力为我们公司制作发票管理系统。由于设计原则,我有点困惑。 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);
答案 0 :(得分:4)
Imho,A)和B)打破SRP
原则,尽管B)耦合较少。
我会以另一种方式解决这个问题:
Invoice
InvoiceProcessor
返回Invoice
代码应如下所示:
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选项更好,因为您可以通过各种方式使用您的方法。如果您选择了第一个建议,将来如果您想编写代码,请说明您的发送,那么您必须再次为调度部分编写相同的代码。这将导致代码中的错误模式。您应尽可能避免重复代码。