¿Dónde coloco la lógica de negocios cuando estoy usando el patrón de repositorio?
-
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.
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