2009-08-17 102 views
0

我目前必須爲我的應用程序驗證自定義字段對象。簡而言之,每個Field對象都包含有關字段驗證的信息以及字段的值。 我正在批量驗證字段,所以目前我有一個驗證類,每個驗證都有一個方法。對於必填字段,它看起來是這樣的:C#自定義對象驗證設計

 private void RequiredFields() 
     { 
      foreach (Field field in allFields) 
      { 
       if ((field.Required == true) && (field.Value == string.Empty)) 
       { 
        field.isValid = false; 
       } 
      } 
     } 

現在我的問題是,我覺得我應該抽象層來驗證,所以不是說:

if ((field.Required == true) && (field.Value == string.Empty)) 

...我想補充一個驗證類,來接受這些值並把它變成這樣:

if (!validater.RequiredFields(field.Required, field.Value)) 

如果我要做到這一點,那就讓我重新使用驗證類不使用領域對象,它會也允許更好的單元測試......但是,它看起來像是和不必要的抽象層,也有點重複......請記住,這是所有驗證中最簡單的。

對此提出建議?

回答

2

爲什麼不讓Field對象負責自己的驗證?

class Field 
{ 
    public bool Required { get; } 
    public string Value { get; set; } 

    // assuming that this method is virtual here 
    // if different Fields have different validation logic 
    // they should probably be separate classes anyhow and 
    // simply implement a common interface of inherit from a common base class. 
    public override bool IsValid 
    { 
     get { return Required && Value != String.Empty; } 
    } 
} 
+0

我第二次,但我會猶豫不決,使一個不需要無效的字段。 – 2009-08-17 20:40:03

+0

嗯,我確實考慮過這個。但是,我驗證了大約100個字段,全部使用不同的驗證,只有其中一些字段對象是特定的。我想保持一致的驗證。 – Jeff 2009-08-17 20:45:22

+0

如果您正在驗證100個字段,所有這些字段都需要不同的驗證邏輯,並且只有其中一些是您自己的自定義類,那麼我會說您有更深的設計缺陷。 – 2009-08-17 21:17:30