概念 - 构建具有独立组件的类

时间:2013-11-27 08:55:04

标签: c# oop

初学者类设计概念问题在这里。

说我想用对象代表发票。从概念上讲,您可以说发票由两种类型的信息组成 - 标题信息(如客户名称,发票日期,发票编号)和订单项信息。有时我的应用程序只需要访问标题信息,有时它只需要访问订单项信息。所有信息并不总是必要的,因此当您真正需要约会时检索订单项似乎就像浪费资源一样。

在尝试遵循良好的设计原则时,最好将其定义为在需要所有信息的同时实例化的两个单独的类吗?还有更好的方法吗?

对待一个像两个物体这样的现实世界的事情对我来说似乎并不合适。

1 个答案:

答案 0 :(得分:2)

您可以将所需的信息分别放入单独的类中,并创建一个由所涉及的所有信息组成的Invoice类。不要将发票视为“一个真实世界的东西”,因为它(纸张形式)不能在物理上分开;诸如字母标题之类的逻辑事物也可以是不同的“真实世界的东西”。

简化(因为它没有正确检查无效值,因为它应该)示例:

public class InvoiceHeader
{
    public string CustomerName { get; set; }

    public int Number { get; set; }

    public DateTime Date { get; set; }
}

public class InvoiceBody
{
    public int Sum { get; set; }

    public string Currency { get; set; }
}

public class Invoice
{
    private readonly InvoiceHeader header = new InvoiceHeader();

    public InvoiceHeader Header {
        get {
            return header;
        }
    }

    private readonly InvoiceBody body = new InvoiceBody();

    public InvoiceBody Body {
        get {
            return body;
        }
    }
}

根据需要随意进一步拆分 - 例如您可能希望将Customer对象与更多信息(例如地址而不是客户名称的string属性)一起使用,并且发票正文可能需要也可能不需要包含所考虑的项目列表在发票中。