我正在尝试为我们公司制作一个发票管理系统。由于设计原理,我有点困惑。固体
假设有一个类负责处理发票: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);
最佳答案
恕我直言,A) 和 B) 都违反了 SRP
原则,尽管 B) 的耦合程度较低。
我会用另一种方式来解决这个问题:
- 创建一个代表
发票
的新类型 - 使
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);
关于c# - 发票应用程序的设计建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23912871/