服务中验证代码的适当位置?

时间:2013-09-02 05:57:56

标签: validation fluentvalidation service-layer

我正在使用FluentValidationService Layer作为我的MVC应用程序。

我有一个问题,关于在哪里放置逻辑来检查重复项目。

假设您有CategoryServiceCategoryValidator,您是否会使用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;
    }

1 个答案:

答案 0 :(得分:1)

在两个地方进行验证毫无意义。在验证器中进行所有验证应该足够了。