我正在使用FluentValidation
和Service Layer
作为我的MVC应用程序。
我有一个问题,关于在哪里放置逻辑来检查重复项目。
假设您有CategoryService
和CategoryValidator
,您是否会使用Must
谓词来检查服务或验证器中的重复类别名称?
在下面的任何一种方法中,我都会做一些常见的事情,例如在验证器中检查有效的类别名称。
方法1
public bool AddCategory(Category category)
{
var validationResult = validationService.Validate(category);
if (!validationResult.IsValid)
return false;
categoryRepository.Add(category);
return true;
}
public CategoryValidator(ICategoryService service)
{
RuleFor(x => x.Name)
.NotEmpty()
.Must((category, name) =>
{
return service.GetCategories().SingleOrDefault(x => x.Name == name) == null;
});
}
方法2
public bool AddCategory(Category category)
{
var existing = categoryRepository.Query().SingleOrDefault(x => x.Name == category.Name);
if (existing != null)
return false;
categoryRepository.Add(category);
return true;
}
答案 0 :(得分:1)
在两个地方进行验证毫无意义。在验证器中进行所有验证应该足够了。