我想知道,在哪裏 - 以及如何頻率 - 在代碼驗證方法的參數。驗證方法參數的地方?
在下面的示例類(.dll庫)中,您認爲最好的方法是什麼?假設我想驗證一些對象不能是null
(但它可以是方法正常運行所需的任何其他驗證)。在第一點檢查它是否更好,在用戶可用的公共方法中,稍後「相信自己」,在其他私人方法中,它不會爲空,或者最好是有點偏執,並且每隔一段時間檢查一次時間將被使用(在點2. 3.和4.)
在使用對象之前檢查它(在點2,3,4)在未來保護我,如果我決定改變某些東西該類,使用這些私有方法,並「忘記」傳遞有效的對象。如果我在將來添加一些新的公開方法,我也不必記住驗證。另一方面 - 它一遍一遍地檢查相同的情況。或者,也許你有其他建議?
public class MyClass()
{
public MyClass()
{
}
public void ProcessObject(SomeObject obj)
{
//1. if (obj == null) throw new ArgumentException("You must provide valid object.");
DoSomething(obj);
DoMore(obj);
DoSomethingElse(obj);
}
private void DoSomething(SomeObject obj)
{
//2. if (obj == null) throw new ArgumenException("You must provide valid object.");
//do something with obj...
}
private void DoMore(SomeObject obj)
{
//3. if (obj == null) throw new ArgumentException("You must provide valid object.");
//do something with obj...
}
private void DoSomethingElse(SomeObject obj)
{
//4. if (obj == null) throw new ArgumentException("You must provide valid object.");
//do something with obj..
}
}
+1''Debug.Assert' –
您可能需要SuperAssert:http://msdn.microsoft.com/en-us/magazine/cc188701.aspx – zmbq