2010-10-21 35 views
0

我正在處理一個需要同一模型的不同驗證集的項目,我們正在試圖找到處理它的最佳解決方案。如何在MVC3中處理服務層驗證

一個簡單的例子可以使用我們的客戶DTO:

public class Customer 
{ 
    [Required] 
    public string FirstName { get; set; } 

    [Required] 
    public string LastName { get; set; } 

    [Required] // Only required on some views 
    public string Title { get; set; } 
} 

在我們的第一個觀點,所有字段是必需的,因爲他們在使用DTO正在DataAnnotations所示。

在我們的第二個視圖中,FirstName和LastName可能是必需的,但Title是可選的,甚至可能不會在視圖中表示。

複雜化出現了,我們希望在我們的服務層中存在驗證規則(以便我們可以在稍後利用相同驗證提供API),它可以訪問數據註釋並對其進行驗證,如果他們不驗證,則向UI回報。

到目前爲止,中獎的方法是:

  • 每個視圖有一個專門的視圖模型,其中DataAnnotations上存在。
  • 然後viewmodel使用類似Automapper的方式映射我們的域對象。
  • 然後,將域對象傳遞給存儲庫和服務以對其執行操作。

這也意味着:

  • 確認不會發生在服務層,由於當時的對象了那裏,他們將域對象,而不是的ViewModels。

有沒有更好的辦法,我們應該爲企業應用程序處理?我們尚未找到解決方案。

回答

0

當它是特定於上下文的時候,你不能將所有的驗證都塞進一個地方。使用你的獲勝方法,但也讓你的實體服務在該層進行適當的驗證。