2013-09-02 4 views
0

Я использую 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; 
    } 

ответ

1

Там нет смысла делать проверку в обоих местах. Достаточно сделать все проверки в валидаторе.