面向对象的设计斗争[关闭]

问题描述 投票:0回答:1

有一件事我似乎无法左右我的头。于是我找了一些输入。

我有一个发票类,它可以打印报告或显示它在屏幕上预览。之前,我可以打印或预览它,我必须从数据库发票加载数据。

发票类基本上是这样的:

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的危险。

难道我把它在构造函数?再次使其成为私人会让我失去的能力进行单元测试。而它似乎并没有正确做到这一点在构造函数中。

还是我移动这个打印和预览选项到另一个类?

你的想法是赞赏!

c#
1个回答
2
投票

我可能会提取功能分为两个独立的类,Invoice保存所有发票数据,并从数据库返回。 InvoiceReport处理打印和预览。我想这两个做的非常类似的工作。如果没有,你甚至可以进一步提取它们。

var invoice = store.GetInvoice(invoiceId);
var invoiceReport = new InvoiceReport();
var preview = invoiceReport.Preview(invoice);
var result = invoiceReport.Print(invoice);
© www.soinside.com 2019 - 2024. All rights reserved.