У меня есть объект учетной записи, который создает пользователя, как так;
public class Account
{
public ICollection<User> Users { get; set; }
public User CreateUser(string email)
{
User user = new User(email);
user.Account = this;
Users.Add(user);
}
}
В моем слое обслуживания при создании нового пользователя я вызываю этот метод. Однако существует правило, согласно которому электронная почта пользователей ДОЛЖНА быть уникальной для учетной записи, так куда же это приведет? Для меня это должно идти в метод CreateUser с дополнительной строкой, которая просто проверяет, является ли электронная почта уникальной для учетной записи.
Однако, если бы это было сделано, тогда ВСЕ пользователи для этой учетной записи должны были бы быть загружены, и для меня это немного накладные расходы. Было бы лучше запросить в базе данных электронную почту пользователей - но для этого в методе потребуется хранилище в объекте account, не так ли? Возможно, тогда ответ будет при загрузке учетной записи из репозитория вместо выполнения;
var accountRepository.Get(12);
//instead do
var accountRepository.GetWithUserLoadedOnEmail(12, "someone@example.com");
Тогда объект учетной записи мог бы по-прежнему проверять коллекцию Users на наличие электронной почты, и она была бы охотно загружена, если бы была найдена.
Это работает? Что бы вы сделали?
Я использую NHibernate в качестве ORM.