【发布时间】:2018-02-23 02:20:24
【问题描述】:
我有一个这样创建用户的帐户对象;
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 方法中添加一个额外的行,用于检查电子邮件是否对帐户是唯一的。
但是,如果要这样做,则需要加载该帐户的所有用户,这对我来说似乎有点开销。最好在数据库中查询用户电子邮件 - 但在方法中这样做需要帐户对象中的存储库,不是吗?也许答案是从存储库加载帐户而不是这样做;
var accountRepository.Get(12);
//instead do
var accountRepository.GetWithUserLoadedOnEmail(12, "someone@example.com");
然后帐户对象仍然可以检查电子邮件的用户集合,如果找到它就会被急切地加载。
这行得通吗?你会怎么做?
我使用 NHibernate 作为 ORM。
【问题讨论】: