与多个实体关联的客户类

时间:2009-06-10 21:00:45

标签: c# oop

所以我有一个应用程序,其主要目的是管理客户。我的问题是,我不确定如何将与客户相关的所有内容联系在一起?为了这篇文章,让我们假装一个客户可以拥有无​​限数量的电子邮件。以下是我的想象:

class Customer {
  private int id;
  private String name;
  private List<Email> emails = new List<Email>();

  public Customer(id, name) {
    this.id = id;
    this.name = name;
  }

  public addEmail(Email email) {
    emails.Add(email);
  }

  public getEmails() {
    return emails;
  }
}

class Email {
  string email;

  public Email(email) {
    this.email = email;
  }
}

Customer newCustomer = new Customer(123, "Dummy Customer");
newCustomer.addEmail(new Email("dummy@abc.com"));

我的目标是这种设计,因为这样,我需要让客户与公司代表联系,我可以简单地添加另一个列表成员。此外,我尝试使用谷歌搜索,但我不确定这个问题是什么。

以下是我不确定的一些事项:

  • 这种设计有多坚如磐石?
  • 当我向客户类添加新实体时,就它负责的内容而言,它不会有点大吗?

谢谢。

4 个答案:

答案 0 :(得分:0)

你的设计看起来很好。

如果客户需要多个电子邮件地址,那么让Customer类包含电子邮件对象列表就完全合情合理。

唯一的问题是它不会强制实现唯一性,因为多个客户不应共享一个电子邮件地址。 (或者他们可以吗?Bob,Mike和Susan都可以发送电子邮件salesteam@megaco.com ??)

答案 1 :(得分:0)

我同意恩斯基。 有关如何开发此课程以及遇到的问题的更多信息将有助于获得更具体的答案。

仅供参考:如果有任何帮助,您使用的OO功能就是构图。

答案 2 :(得分:0)

您的命名值得怀疑。 “电子邮件”实际上是电子邮件地址,还是电子邮件的文本?根据您的使用情况,它显然是一个地址,因此您可能需要右键单击 - >重构 - &gt;重命名该地址。

为什么要打扰“添加电子邮件”方法或“获取电子邮件”方法?只需公开一个公共getter属性。

以下是我可能会这样做的。

class Customer
{
    int id_;
    string name_;
    public IList<EmailAddress> EmailAddresses{get; private set;}

    public Customer(int id, string name)
    {
        id_ = id;
        name_ = name;
        EmailAddresses = new List<EmailAddress>();
    }
}

var newCustomer = new Customer(123, "Dummy Customer");
newCustomer.EmailAddresses.Add(new EmailAddress("dummy@abc.com")); 

答案 3 :(得分:0)

同意,你的设计很好,从你拥有的数据构建你的对象没有问题。

你要小心的是,你不希望你的对象包含任何业务逻辑或数据访问等等,那么它将不仅仅是代表自己负责。

在这里查看单一责任原则是来自对象导师的great article