Où placer la logique métier lorsque j'utilise le modèle de référentiel?

StackOverflow https://stackoverflow.com/questions/1618673

  •  06-07-2019
  •  | 
  •  

Question

J'utilise le modèle de référentiel pour mon application. J'ai un utilisateur de classe. L'utilisateur est identifié par email. Le référentiel d'utilisateurs contient une méthode CreateUser (utilisateur utilisateur). Une règle commerciale stipule que les utilisateurs doivent avoir un courrier électronique unique.

Je souhaite implémenter une transaction qui vérifie d'abord si un courrier électronique est en cours d'utilisation. Sinon, l'utilisateur est créé. Où devrais-je mettre ce code qui est chargé de vérifier l'unicité du courrier électronique?

C’est définitivement une règle de gestion; c'est la logique de l'entreprise. Je pense que ce n'est pas correct de mettre cette vérification dans mon implémentation de UserRepository.

Était-ce utile?

La solution

Ce genre de chose va généralement dans (1) un service ou (2) directement dans le schéma en tant que contrainte de base de données (et souvent les deux).

Avec un service, vous n’accédez pas directement au référentiel à partir du code client; vous appelez un service qui effectue les opérations utiles pour vous.

Par exemple, quelque chose comme:

public class UserService : ... {
  private Repository<User> _userRepository;

  public void CreateUser(User u) {
    // Verify that the user's email is unique.
    if ( ... ) {
      _userRepository.Create(u);
    }
  }
}

Autres conseils

Si vous créez une application suffisamment grande pour créer un modèle de référentiel , alors vous ' Nous voudrons que cette validation soit aussi proche que possible des données, probablement une contrainte de base de données telle qu'un index / clé unique. Cela évite que des bogues ne fuient ultérieurement dans le code en raison de données corrompues.

En supposant que vous utilisiez une base de données pour le stockage, vous devez absolument ajouter une contrainte unique à la colonne e-mail de la base.

Découvrez cet excellent article sur Simple Talk:

Cinq erreurs simples de conception de base de données à éviter

Voir la section 4:

  

Application de l'intégrité via des applications

     

Les partisans de l'application   l'intégrité soutient généralement que   les contraintes ont un impact négatif sur les données   accès. Ils assument également sélectivement   appliquer des règles basées sur les besoins de   l'application est le meilleur moyen de   prendre. .....

     

La solution est simple.

     

Ne comptez sur rien d'autre pour fournir    complétude et exactitude sauf    la base de données elle-même. Je n'ai   ne signifie ni utilisateurs ni applications   externe à la base de données. **

Donc, dans votre cas, une contrainte unique sur votre colonne de courrier électronique devrait vraiment être modélisée dans la base de données. C’est le meilleur endroit pour mettre en place cette logique d’entreprise et vous évitera beaucoup de chagrin à long terme.

Marc

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top