2010-10-06 73 views
0

這是我的情況。我的解決方案結構如下。從單獨項目中的驗證類填充MVC視圖模型

Project用來處理路徑,顯示數據,...

Project.Core用於處理業務邏輯,驗證,查詢,...

Project.Core我有我的驗證DTO(一個驗證類數據傳輸對象)。

我的驗證類(在Project.Core):

public class IncidentValidator<T> : IValidator<T> 
    where T : AuditReport 
{ 
    public IncidentValidator(IList<T> ar) 
    { 
     AR = ar; 
    } 

    public IList<T> AR { get; set; } 

    public IList<Model> Validate() 
    { 
     var list = new List<Model>(); 
     foreach (T ar in AR) 
     { 
      list.Add(new Model 
         { 
          IncidentId = new KeyValuePair<int, RuleType>(
           ar.IncidentId, 
           new OccurrenceCountRule(ar).RulesValidate() 
           ), 
          Circuit = new KeyValuePair<string, RuleType>(
           ar.Circuit, 
           new CircuitRule(ar).RulesValidate() 
           ) 
         }); 
     } 

     return list; 
    } 
} 

我的觀點模型(Project):

public class Model 
{ 
    public KeyValuePair<int, RuleType> IncidentId { get; set; } 
    public KeyValuePair<string, RuleType> Circuit { get; set; } 
} 

所以我的問題是,應該Project.Core參考Project有機會獲得我的視圖模型所以我的驗證類可以填充它?然而,我不太喜歡這種方法。我想過在我的控制器內部進行驗證,但也不喜歡這個想法。也許我的觀點模型可以在Project.Core之內生存或者被認爲是不好的設計?

我能做些什麼?

回答

2

如果此驗證程序類旨在驗證視圖模型,那麼您應該將它放在與包含視圖模型的項目相同的項目中。另一種可能性是將視圖模型外部化爲一個單獨的程序集,您可以參考Project.Core(儘管第一種方法似乎更好)。在任何情況下,您都不應在Project.Core中提及Project

+0

驗證器將負責驗證我的DTO並在視圖模型中填充結果。 – Mike 2010-10-06 18:25:00

2

爲每個視圖模型類型創建一個接口,該接口駐留在Project.Core中,並讓實際視圖模型實現接口並駐留在Project中。這樣,你就可以使用你需要的東西在Project.Core進行驗證,而不必關心實現。

1

我想說,在控制器中創建一個組件來管理驗證過程(框架現在在控制器中進行驗證),所以控制器不必做很多工作,除了委託到另一個進程。此外,接口可以工作,或者您可以利用另一種設計模式進行驗證。也許驗證工廠可以包含一個驗證器接口,但驗證器邏輯駐留在模型的Project中。

HTH。