2016-04-15 61 views
0

我有我的C#類的函數:應該驗證不同的代碼塊是否合併?

class Fun { 
    private string waterGun; 
    private string jacket; 

    void HaveSomeFun(bool summers) { 
     waterGun = <Some Value> 
     jacket = <Some Other Value> 

     validate(); 
     if(summers) { 
      Console.WriteLine("Using {0}", waterGun); 
     } else { 
      Console.WriteLine("Using {0}", jacket); 
     } 
    } 

    private void validate() { 
     ArgumentValidationHelper.ValidateNotNullOrEmpty("WaterGun", this.waterGun); 
     ArgumentValidationHelper.ValidateNotNullOrEmpty("Jacket", this.jacket); 
    } 
} 

我提出的變量實例成員剛剛進行驗證。將變量的範圍從方法擴展到僅用於驗證的類是否有意義?

是否有任何其他(更好)的方式來實現此功能,其中驗證集中和變量不需要是類成員?

+0

如果你足夠勇敢,可以使用[System.ComponentModel.DataAnnotations](https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.validator(v = vs.110)。 ASPX)。 [Here](http://stackoverflow.com/q/2109423/6138713)是一個有關數據註釋的回答問題。 –

回答

0

根據你的代碼驗證邏輯已經集中(我希望當你/有人創建了ArgumentValidationHelper類的時候是完整的意圖,而且增加一個Validate方法來包裝這兩個驗證,我覺得,除非你需要有其他的東西在裏面

我覺得,你知道那些類變量不是必需的,是的他們沒有任何意義,因爲他們是(A)private(B)不會被調用代碼設置。

所以我的你的代碼版本是:

class Fun { 
    void HaveSomeFun(bool summers) { 
     string waterGun = <Some Value> 
     string jacket = <Some Other Value> 

     ArgumentValidationHelper.ValidateNotNullOrEmpty("WaterGun", waterGun); 
     ArgumentValidationHelper.ValidateNotNullOrEmpty("Jacket", jacket); 

     if(summers) { 
      Console.WriteLine("Using {0}", waterGun); 
     } 
     else { 
      Console.WriteLine("Using {0}", jacket); 
     } 
    } 
} 
+0

這聽起來對我來說很合理。我猜想爲了驗證而增加從方法到類的變量範圍並不是一個好的策略。 – Amber

0

首先,我不確定爲什麼你的成員變量是私人的。這是一個錯字嗎?如果用戶不能改變它們,那麼你不需要驗證它們。

假設你實際上是公開的,你可以考慮將成員變量轉換成屬性並在setter中進行驗證。然後,您可以拋出錯誤或將其設置爲某個默認值。我更喜歡這種方法,因爲它確保您的類始終處於有效狀態(假設調用代碼明智地處理錯誤...),而不必每次使用時都調用validate()。

如果你想留下他們作爲參數,你也可以做一個輔助類:

class FunArguments { 
    private string waterGun; 
    public string WaterGun { 
     get { return waterGun; } 
     set { 
      //do some validation check here 
      waterGun = value; 
     } 
    } 
    // etc.. 
} 

然後你就可以傳遞給樂以某種方式。

+0

我的問題是:將變量的範圍從方法增加到僅用於驗證的類是否有意義?你正在建議讓他們成爲實例成員。這是有原因的嗎? – Amber

+0

那麼這取決於你的變量來自哪裏,這是我從你的代碼中無法分辨出來的。只是寫''不是很清楚。 – smead

相關問題