2015-01-09 54 views
0

通過流暢的驗證,您可以在更新密碼之前驗證諸如NotNull,numberGreaterThan或更高級的業務規則(如userMustExistsOnDb)之類的簡單內容。您是否使用流暢的數據庫調用驗證

我覺得當我使用流利的驗證我做雙倍數據庫調用比當我不是使用它。這是一個例子。

public class DeleteCustomerRequestValidator: AbstractValidator<DeleteCustomerRequest> { 
    public DeleteCUstomerRequestValidator() { 
    RuleFor(customer => customer.Id).GreaterThan(0); 
    RuleFor(customer => customer.Id).Must(ExistsOnDB).WithMessage("The customer does not exists"); 
    } 

    private bool ExistsOnDB(int customerId) { 
    // DB call to check if exists on Db 
    return Respository.Customers.Any(x => x.Id == customerId) // CALL NUMBER 1 
    } 
} 

這裏的刪除方法在那裏我做了第二個電話

public void DeleteCustomer(int customerId) 
{ 
    Customer customer = Repository.Customers.First(x => x.Id); // CALL NUMBER 2 
    Repository.Customers.Delete(customer) 
    Repository.Save() 
} 

但是如果我沒有用流利的驗證我會做只有一個調用擺脫DB客戶。

public void DeleteCustomer(int customerId) 
{ 
    if (customerId < 1) 
    { 
     /// Return error. 
    } 
    Customer customer = Repository.Customers.FirstOrDefault(x => x.Id); // Only 1 CALL 
    if (customer == null) 
    { 
     // Return error. 
    } 
    Repository.Customers.Delete(customer) 
    Repository.Save() 
} 

我做錯了什麼?有沒有更好的方法來做到這一點?

謝謝你的時間。

+0

打開SQL Server分析器並查看哪些調用正在觸發db – reggaeguitar

回答

0

一般來說,我會說NO,不要使用Fluent Validation。

  1. 我想你增加額外的複雜性/非必要AbstractValidator班,其中一個簡單的,如果就足夠了。

  2. 對於像「刪除」這樣的東西,是的,你會檢查客戶是否先存在。但是MOST邏輯應該在Customer類中。因此,你不應該需要這個外部驗證器類。

0

如果您想擁有一個IsValid和一個過程中發生的錯誤列表,則需要使用FluidValidation。在這種情況下,你會添加一個驗證,證明整個刪除成功,否則驗證會記錄爲什麼不成功。但不是每一行代碼的驗證。