Estoy trabajando en la reescritura de mi aplicación ASP.NET MVC utilizando los principios de diseño impulsados por el dominio. Estoy tratando de validar mi entidad de usuario. Hasta ahora, puedo validar reglas básicas (como el nombre de usuario y la contraseña como una cadena que no es nula/blanca). Sin embargo, una de las reglas, necesito asegurarme de que el nombre de usuario sea único. Sin embargo, necesito acceder a la base de datos para hacer esto, lo que significa que tendría que inyectar mi IUserservidor en mi entidad de usuario de esa manera.DDD Domain Model Complex Validation
public class User
{
private readonly IUserRepository _userRepository;
public User(IUserRepository repo)
{
_userRepository = repo;
}
public override void Validate()
{
//Basic validation code
if (string.IsNullOrEmpty(Username))
throw new ValidationException("Username can not be a null or whitespace characters");
if (string.IsNullOrEmpty(Password))
throw new ValidationException("Password can not be a null or whitespace characters");
//Complex validation code
var user = _userRepository.GetUserByUsername(Username);
if (user != null && user.id != id)
throw new ValidationException("Username must be unique")
}
}
Sin embargo, esto parece ... bien, está mal. Hacer que mi entidad dependa de mi repositorio parece una mala idea (corrígeme si me equivoco). Pero tener el código de validación en la entidad tiene sentido. ¿Dónde está el mejor lugar para poner código de validación complejo?
Ver también [esta respuesta] (http://stackoverflow.com/a/9676307/706456) – oleksii