从丑陋到优雅,让代码越变越美续集之服务器端数据校验
返回info是因为我们在后台代码中,往往需要根据检测结果做其他业务方面的处理,如果你 不需要返回信息,并不想单独在外边写ShowMessage函数,可以在vInfo里面增加一个ShowMessage函数,让贫血的实体类不在贫血, 实现像下面这样看起来更优雅的检测:
Code7
vInfo info = vHelper.StartVerify (10)
.IsNotNullOrEmpty("输入 为空")
.Min(0, "输入小于0")
.Max(100, "输入大于100")
.EndVerify()
.ShowMessage ();
vInfo info = vHelper.StartVerify (10)
.IsNotNullOrEmpty("输入 为空")
.Min(0, "输入小于0")
.Max(100, "输入大于100")
.EndVerify()
.ShowMessage ();
当然,不写在实体类,写在我们的检测基类中也可以.不过,ShowMessage的方式往往涉及 具体业务逻辑,个人认为还是放到外层比较合适.
废话不说了.先看看我们是如何实现这个检测的,我们先定义个检测基 类:
Code8
public class v
{
protected bool Status;
protected string Message;
public vInfo EndVerify()
{
vInfo info = new vInfo ();
info.Status = Status;
info.Message = Message;
return info;
}
}
public class v
{
protected bool Status;
protected string Message;
public vInfo EndVerify()
{
vInfo info = new vInfo ();
info.Status = Status;
info.Message = Message;
return info;
}
}
基类只有一个 EndVerify(),这个函数用来返回具体检测结果信息.然后,我们根据各种检测类型构建不同的检测子类.校验不是一个类在战斗,这一刻, 校验被工厂模式灵魂附体.....成功了,校验成功了,成功不是靠一个类实现的,他不是一个类....(sorry,扯远了..^_^)
String类型 检测子类:
Code9
public class vString:v
{
string stringT = null;
public vString(string T)
{
stringT = T;
Status = true;
Message = string.Empty;
}
public vString IsNotNullOrEmpty(string msg)
{
if (string.IsNullOrEmpty(stringT))
{
Status = false;
Message = msg;
}
return this;
}
public vString IsInt (string msg)
{
if (!Status)
return this;
int intTemp = 0;
Status = int.TryParse(stringT, out intTemp);
if (!Status)
Message = msg;
return this;
}
public vString Min (int min, string msg)
{
if (!Status)
return this;
if (int.Parse(stringT) < min)
{
Status = false;
Message = msg;
}
return this;
}
public vString Max (int max, string msg)
{
if (!Status)
return this;
if (int.Parse(stringT) > max)
{
Status = false;
Message = msg;
}
return this;
}
}
public class vString:v
{
string stringT = null;
public vString(string T)
{
stringT = T;
Status = true;
Message = string.Empty;
}
public vString IsNotNullOrEmpty(string msg)
{
if (string.IsNullOrEmpty(stringT))
{
Status = false;
Message = msg;
}
return this;
}
public vString IsInt (string msg)
{
if (!Status)
return this;
int intTemp = 0;
Status = int.TryParse(stringT, out intTemp);
if (!Status)
Message = msg;
return this;
}
public vString Min (int min, string msg)
{
if (!Status)
return this;
if (int.Parse(stringT) < min)
{
Status = false;
Message = msg;
}
return this;
}
public vString Max (int max, string msg)
{
if (!Status)
return this;
if (int.Parse(stringT) > max)
{
Status = false;
Message = msg;
}
return this;
}
}