Класс клиента, связанный с несколькими объектами - PullRequest
0 голосов
/ 11 июня 2009

Итак, у меня есть приложение, основной целью которого является управление клиентами. Моя проблема в том, что я не уверен, как связать все, что связано с клиентом, вместе? Ради этого поста давайте представим, что клиент может иметь неограниченное количество писем. Ниже то, что я предполагал:

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"));

Я стремлюсь к этому дизайну, потому что так, скажем, мне нужно, чтобы клиенты ассоциировались с представителями компании, я мог бы просто добавить еще одного участника в список. Кроме того, я пробовал поискать в Google, но я не совсем уверен, как называется эта проблема.

Вот некоторые вещи, в которых я не уверен:

  • Насколько прочен этот дизайн?
  • Когда я добавляю новые объекты в класс клиентов, разве он не станет немного большим с точки зрения того, за что он отвечает?

Спасибо.

Ответы [ 4 ]

0 голосов
/ 24 февраля 2012

Согласен, ваш дизайн хорош, нет проблем в построении вашего объекта из данных, из которых он состоит, как у вас.

Если вы хотите быть осторожным, вы не хотите, чтобы ваш объект содержал какую-либо бизнес-логику, доступ к данным и т. Д., Тогда он стал бы ответственным не только за представление себя.

Взгляните на принцип единой ответственности, вот отличная статья 1006 * от Object Mentor

0 голосов
/ 11 июня 2009

Я бы согласился с саннским. Дополнительная информация о том, как вы собираетесь развивать этот класс, и о проблемах, с которыми вы сталкиваетесь, поможет получить более конкретный ответ.

К вашему сведению: ОО-функция, которую вы используете, - это композиция, если вам нужна помощь.

0 голосов
/ 11 июня 2009

Ваше имя сомнительно. Является ли «электронная почта» адресом электронной почты или текстом сообщения электронной почты? Исходя из вашего использования, это, очевидно, адрес, поэтому вы можете щелкнуть правой кнопкой мыши -> refactor-> переименовать его.

Почему вы беспокоитесь о методе «добавить электронную почту» или «получить электронную почту»? Просто выставьте публичную собственность геттеру.

Вот как бы я это сделал.

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")); 
0 голосов
/ 11 июня 2009

Ваш дизайн выглядит отлично.

Если клиентам требуется несколько адресов электронной почты, то создание класса Customer, содержащего список объектов Email, имеет смысл.

Единственная проблема заключается в том, что она не обеспечивает уникальность, поскольку несколько клиентов не должны использовать один адрес электронной почты. (или, может, они могли? Может ли Боб, Майк и Сьюзен иметь электронную почту salesteam@megaco.com ??)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...