¿Dónde coloco la lógica de negocios cuando estoy usando el patrón de repositorio?

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

  •  06-07-2019
  •  | 
  •  

Pregunta

Estoy usando el patrón de repositorio para mi aplicación. Tengo un usuario de clase. El usuario es identificado por correo electrónico. El UserRepository contiene un método CreateUser (usuario usuario). Hay una regla de negocios que dice que los usuarios deben tener un correo electrónico único.

Quiero implementar una transacción que primero verifica si un correo electrónico está en uso y, de no ser así, se crea el usuario. ¿Dónde debo colocar este código que es responsable de verificar la singularidad del correo electrónico?

Esta es definitivamente una regla de negocios; es lógica de negocios. Creo que no es correcto poner esta comprobación en mi implementación de UserRepository.

¿Fue útil?

Solución

Este tipo de cosas normalmente va en (1) un servicio o (2) directamente en el esquema como una restricción de base de datos (y con frecuencia en ambos).

Al utilizar un servicio, no accede al Repositorio directamente desde el código del cliente; llama a un servicio que realiza las operaciones útiles por usted.

Por ejemplo, algo como:

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

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

Otros consejos

Si está creando una aplicación lo suficientemente grande como para autorizar un patrón de repositorio , entonces ' Querré poner esta validación lo más cerca posible de los datos, probablemente una restricción de la base de datos, como un índice / clave único. Esto evita situaciones de errores que se filtran en el código más adelante debido a datos corruptos.

Suponiendo que está utilizando una base de datos para el almacenamiento, definitivamente debe agregar una restricción única en la columna de correo electrónico en la base de datos.

Echa un vistazo a este excelente artículo en Simple Talk:

Cinco errores simples de diseño de base de datos que debe evitar

Ver en la Sección 4:

  

Aplicación de la integridad a través de aplicaciones

     

Proponentes de aplicación basados   la integridad por lo general argumenta que   Las restricciones impactan negativamente los datos   acceso. También asumen selectivamente   aplicando reglas basadas en las necesidades de   La aplicación es la mejor ruta para   tomar. .....

     

La solución es simple.

     

No confíe en nada más que proporcionar    integridad y corrección excepto    la propia base de datos. Por nada, yo   significa ni usuarios ni aplicaciones   externo a la base de datos. **

Entonces, en su caso, una restricción única en su columna de correo electrónico debería ser modelada en la base de datos. Ese es el mejor lugar para poner esa pieza de lógica comercial, y le ahorrará mucho dolor a largo plazo.

Marc

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top