我得到了一個帶有控制器和服務的API,當調用控制器中的一個動作時,我必須應用一個驗證,此驗證需要檢查數據庫中的數據以驗證它是否正確。在webapi中的異常處理MVC.net
據我所看到的也有叫「更新」,以防止錯誤
public IActionResult UpdateCustomer(CustomerDto customer)
{
if (!customerService.Validate(customer))
{
return Send400BadRequest();
}
customerService.Update(customer);
return Send200Ok();
}
2-呼叫內更新驗證和罰球前處理這個
1-驗證兩種方法例外。
public IActionResult UpdateCustomer(CustomerDto customer)
{
customerService.Update(customer);
return Send200Ok();
}
在客戶服務
public void Update(CustomerDto customer)
{
if (!Validate(customer)
throws new CustomValidationException("Customer is not valid");
//Apply update
}
我們已經有一個ActionFilter處理CustomValidationException所以它會返回一個錯誤請求。
1) 優點 +不要使用例外爲使用運行流動
缺點 -Controller是更多的脂肪,對每一種情況下,將決定哪個是輸出
2多個決策) 優點 +操作更原子化,所有邏輯都在服務內部。 +更容易測試 +該方法的每次使用都將被驗證。
缺點 - 使用異常來管理流程。
哪一個更好的解決方案?
我確實需要論據來捍衛其中的一個。
我不會考慮2個額外的代碼行膨脹控制器IMO。 –
對我來說不是那麼臃腫與否,但更多的是決定不應該在控制器中 – Balder
@Balder,使用另一個動作過濾器在進行動作之前進行驗證。貫穿始終的關切和單一責任原則。 – Nkosi