2015-07-12 1 views
0

J'essaie d'ajouter de l'architecture à mes projets et d'enrichir mes modèles. J'ai commencé avec CQS (implémentation similaire à celui-ci: CQS-Sample) et voici mon premier problème.Validation de modèle, contraintes de base de données

Disons que j'ai deux classes comme celles-ci-dessous:

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; } 
} 

objet réseau peut avoir l'utilisateur, mais je dois vérifier d'abord dans la base de données que l'e-mail donnée n'existe pas déjà ou faire d'autres vérifications , ainsi mes commandes seront exécutées avec succès. En ajoutant un utilisateur, je veux dire ajouter un nouvel utilisateur à la base de données. Serait-il correct de le faire?

Répondre

1

Vous pouvez le faire comme vous le faites maintenant et c'est bon.

Une autre option consiste à effectuer cette validation au Contoller. Ensuite, vous devez utiliser Remote attribute. Et Déplacez votre IsEmailUnique(string mail) méthode à Controller.

Si vous voulez savoir comment vous pouvez le faire avec e-mail vérifier - this question vous aidera.