1

我試圖圍繞驗證用戶輸入和驗證業務對象。假設我正在使用Customer對象。它具有以下屬性:CustomerId,FirstName和LastName。 FirstName和LastName是必需的,它們的長度不能超過50個字符。用戶輸入驗證和業務對象驗證混淆

我正在使用ASP.NET MVC 3.我也在試驗Fluent驗證(但不一定是此驗證框架)。

當我在創建客戶視圖,我通過視圖的CustomerViewModel:

[Validator(typeof(CustomerViewModelValidator))] 
public class CustomerViewModel 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

在CustomerViewModelValidator我設置所需的規則驗證如上所述。這一切在視圖上都可以很好地驗證。現在我有一個問題。在我的應用程序中,我有一個服務層,在這裏我想要應用所有的應用程序邏輯。假設我想保存一個新客戶,那麼我將在CustomerService中有一個Save customer方法,該方法調用CustomerRepository的Save方法。

我可能會有另一個應用程序(上述Web應用程序除外)將使用我的服務層。所以這意味着如果創建了一個Customer對象,我將不得不驗證一個Customer對象。出現以下問題:

  • 是否需要驗證CustomerService中的Customer對象以及檢查FirstName和LastName?
  • 最好是創建一個新的驗證器類來驗證Customer類嗎?或者我應該分享它?
  • 我是否需要驗證CustomerId?我的意思是它應該大於零,但是如何驗證ID爲0的新客戶?

如果任何人都可以分享一些見解/文章,將不勝感激。

我想添加一些業務規則,以及這是什麼?我在哪裏以及如何實施業務規則?

回答

0

我是否需要驗證CustomerService中的Customer對象以及檢查FirstName和LastName?

對這件事情可能會有不同的意見,我的意思是,如果你正在創建一個可重用的服務,那麼在服務級別驗證Customer對象會更加正確。

最好是創建一個新的驗證器類來驗證Customer類嗎?或者我應該分享它?

您應該創建一個新的驗證器。請記住,CustomerViewModelCustomer是兩個不同的類別。視圖模型特定於給定視圖,並且可能包含模型類屬性的子集或超集。服務層的驗證應該只驗證業務規則。如果你使用SQL服務器,這個驗證甚至可以在數據庫級執行(通過設置列的長度),並且如果其中一些業務規則是侵犯。