Инкапсулировать ответственность класса - PullRequest
1 голос
/ 27 февраля 2012

Мне нужна помощь. Я реализую историю пользователя, где, когда создается новый клиент, для него также создается новая учетная запись. Должно ли создание учетной записи и присвоение ее собственности быть обязанностью клиента (создание учетной записи в конструкторе клиента) или я должен использовать некоторый класс обслуживания домена в качестве своего рода процессора создания арендатора, где также выполняется логика проверки?

Edit:

Когда клиент создается, для него также создается учетная запись клиента. Учетная запись клиента не существует сама по себе (без клиента). Но мне также нужно работать с Учетными записями, которые находятся в приложении, должен ли я считать учетную запись Entity?

Я частично решил, как

public class Customer:EntityBase<Customer>
{
   public Customer(...)
   {
      ...
      Account = new Account(this);
   }

   public Account Account {get; private set;}
}

public class Account
{
   public Account(Customer customer)
   {
      if(customer.Account!= null) {throw ...}
      AccountOwner = customer;
   }
   public Customer AccountOwner {get;private set;}
}

Ответы [ 2 ]

1 голос
/ 27 февраля 2012

Нам нужно больше контекста, чтобы дать вам хороший ответ. Если предположить, что Клиенту всегда будет нужна Учетная запись (это только предположение), тогда я буду иметь дело с этим в конструкторе Customer, да. Не знаю, как устроены ваши классы, так что это предположение. Это также зависит от отношений между Учетной записью и Клиентом.

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

Это зависит от этого: нужно ли уничтожать аккаунт, когда уничтожается клиент? Если это так, то вы можете создать учетную запись в конструкторе. Если учетная запись «живет» дольше, чем клиент, необходимо создать ее вне клиента.

...