模型验证、数据库约束

Model validation, database constraints

我正在尝试为我的项目添加一些架构并丰富我的模型。 我从 CQS 开始(实现类似于那个:CQS-Sample),这是我的第一个问题。

假设我有两个 类,如下所示:

public class Network
{
    public int Id { get; set; }
    public User User { get; set; }
    private IQueryFactory _queryFactory { get; set; }

    public Network(IQueryFactory queryFactory)
    {
        _queryFactory = queryFactory;
    }

    public void AddUser(User user)
    {
        if(this.User == null && user != null)
        {
            userHasUniqueEmail(user);
            this.User = user;
        }

    }

    private void userHasUniqueEmail(User user)
    {
        bool isUnique = _queryFactory.ResolveQuery<INewUserUniqueQuery>().Execute(user.Email);
        if (!isUnique)
        {
            throw new ArgumentException("E-mail is not unique");
        }
    }
}

public class User
{
    public int Id { get; set; }
    public string Email { get; set; }
}

网络对象可以有用户,但我需要先在数据库中检查给定的电子邮件是否不存在或做一些其他检查,这样我的命令才能成功执行。 通过添加用户,我的意思是将全新的用户添加到数据库中。 这是正确的做法吗?

你可以按照现在的方式去做,没问题。

另一种选择是在 Contoller 中进行此验证。那么你应该使用Remote attribute。并将您的 IsEmailUnique(string mail) 方法移动到 Controller.

如果您想知道如何使用电子邮件检查 - this question 会帮助您。