I got an API with a controller and a service, when invoking one of the action in the controller I must apply a validation, this validation need to check the data in DB to validate that is correct.
As far as I can see there are two ways of handling this
1- Validate before calling the "update" to prevent the error
public IActionResult UpdateCustomer(CustomerDto customer)
{
   if (!customerService.Validate(customer))
   {
       return Send400BadRequest();
   }
   customerService.Update(customer);
   return Send200Ok();
}
2- Call the update validate inside and throw an Exception.
 public IActionResult UpdateCustomer(CustomerDto customer)
 {
    customerService.Update(customer);    
    return Send200Ok();
 }
In customer service
  public void Update(CustomerDto customer)
  {
     if (!Validate(customer)
        throws new CustomValidationException("Customer is not valid");
     //Apply update
  }
We already have an ActionFilter to handle the CustomValidationException so it will return a BadRequest.
1) Pros +Don't use Exception to use the running flow
Cons -Controller is more fat, has more decision on each case it will decide which is the output
2) Pros +Operation is more atomic, all logic is inside the service. +Easier to test +Every use of the method will be validated.
Cons -Use exception to manage the flow.
Which is a better solution?
I really need arguments to defend one or the other.
 
     
     
     
     
     
     
     
    