從丑陋到優雅,讓代碼越變越美續集之服務器端數據校驗
數據校驗是兩方面的,客戶端校驗雖然可以大大減少服務器回調次數提升用戶體驗.但是客戶端校驗并不是萬能 的,從原理上說,客戶端返回的數據都是不可信任的,服務器端校驗必不可少。(關于客戶端校驗的總結:從丑陋到優雅,讓代 碼越變越美(客戶端檢測方法思考) )
總的來說,服務器端代碼也經歷了相似的幾個過程:
以判斷一個輸入是否是可以轉換成整數為例,開始大家都會續項強寫:

string str = txtTest.Text;
if (!string.IsNullOrEmpty(str))
{
int? intResult = 0;
if (int.TryParse(str, out intResult))
{
if (intResult>0 && intResult<100)
{
//success
}
else
{
ShowMessage ("輸入必須大于0小于100");
}
}
else
{
ShowMessage("不能格式化 為Int類型");
}
}
else
{
ShowMessage("輸入為空");
}
看著就夠麻煩,然后大家都會總結經驗,將檢測寫成一個一個的函 數:

protected bool IsInt(string str)
{
if (!string.IsNullOrEmpty(str))
{
int? intResult = 0;
if (int.TryParse(str, out intResult))
{
return true;
}
}
return false;
}
protected bool IsInRange(int max,int min,int input)
{
if (input > min && input < max)
return true;
else
return false;
}
然后輕松調用:


if (IsInt (str))
{
if(IsInRange(100,0,int.Parse (str))
{
//success
}
else
{
ShowMessage("輸入必須大 于0小于100");
}
}
else
{
ShowMessage("不能格式化為Int 類型");
}
這樣界面果然清爽多了..但是這樣就滿足了嗎? 當然不是,這樣的寫法還是有很多缺點的,例如一大堆各種類型的判斷函數很難記得住,加的方法多了還很容易重復,還有例如隨著判斷 條件的增多那一堆"If"就讓人火大~不優雅啊!!在這個追求優雅的時代,怎么能讓這樣的代碼出在我們追求完美的人的手中? 一定要干 掉它們!
下面,我們就介紹一種經過改良的客戶端檢測解決方案:

vInfo info = vHelper.StartVerify (txtTest.Text)
.IsNotNullOrEmpty("輸入為空 ")
.IsInt("不能格式化為Int 類型")
.Min(0, "輸入小于0")
.Max(100, "輸入大于100")
.EndVerify();
ShowMessage(info);
上邊 這個是檢測字符串是否只能轉換成int并在0到100范圍的.下邊這個是檢測int類型是否屬于0到100范圍的.

vInfo info = vHelper.StartVerify (10)
.IsNotNullOrEmpty("輸入 為空")
.Min(0, "輸入小于0")
.Max(100, "輸入大于100")
.EndVerify();
ShowMessage(info);
相似吧? 無論在檢測的數據是任何類型,都只是同一種寫法,淺顯易記又優雅(囧!),返回的vInfo是一個貧血的實體類:

public class vInfo
{
private bool _Status;
public bool Status
{
get { return _Status; }
set { _Status = value; }
}
private string _Message;
public string Message
{
get { return _Message; }
set { _Message = value; }
}
}
全站熱搜