有一件事我似乎无法左右我的头。于是我找了一些输入。
我有一个发票类,它可以打印报告或显示它在屏幕上预览。之前,我可以打印或预览它,我必须从数据库发票加载数据。
发票类基本上是这样的:
public class Invoice{
private int _invoiceID;
public Invoice(int invoiceID){
_invoiceID = invoiceID
}
public bool LoadData(){
(loads info from the database into the report)
}
public bool Print(){
(Prints the report to the printer)
}
public Report Preview(){
(Returns the report for previewing)
}
}
我的问题是,我该叫LoadData我打印和预览方法里面?然后我会做LoadData一个私有函数,但我不能单元测试它了。如果你想调用打印预览,并在同一时间为同一张发票上,它会在同一张发票LoadData两次。
难道我把它作为一个公共职能?然后,我将不得不把它后,我实例化我的发票类和之前我所说的打印或预览,以忘记调用LoadData的危险。
难道我把它在构造函数?再次使其成为私人会让我失去的能力进行单元测试。而它似乎并没有正确做到这一点在构造函数中。
还是我移动这个打印和预览选项到另一个类?
你的想法是赞赏!
我可能会提取功能分为两个独立的类,Invoice
保存所有发票数据,并从数据库返回。 InvoiceReport
处理打印和预览。我想这两个做的非常类似的工作。如果没有,你甚至可以进一步提取它们。
var invoice = store.GetInvoice(invoiceId);
var invoiceReport = new InvoiceReport();
var preview = invoiceReport.Preview(invoice);
var result = invoiceReport.Print(invoice);