2010年1月29日星期五
琢磨了一下,从今天起,开始写日志了。毕竟我写这个类库(框架?)已经长达半年多了,修修订订,增增删删,整个过程我想写下自己的心得体会。
就像我写类库一样,我最初只是想写一个便于与数据库之间的交互访问,到今天扩展到七八十个类,坦白说,连我自己都没想到。我的想法很就简单,将来透过自己的日志,恍悟当时的代码含义。不得不说,随着类库的扩增中,我有点力不从心了。尤其是家里的生意忙,最近又要学习驾驶(笔试)。
这个月是值得纪念的一个月,首先是我踏入了20岁的门槛,踏出了学校的门槛,踏进了“驾驶培训”的门槛。3个踏,是否见证我已经是一个社会人士了?
哎,我这个有点罗嗦和无意的炫耀,各位看官权当娱乐一笑而过吧。
由于要学习驾驶,那长达2500的考题,令人不禁头晕目眩。简单说下今天的类库更新内容吧。
此次类库更新主要还是ASP.NET MVC方面,简单说,以往我(请注意,仅仅是我)在编写ASP.NET MVC应用程序时,对表单的验证总是这样的。
以最常见的注册Action为例:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Register(string username, string password,string repassword)
{
if (!username.IsNull() && 3 < username.Length && username.Length < 20)
{
if (!password.IsNull() && 3 < password.Length && username.Length < 50)
{
if (password == repassword)
{
// and so on ...
}
else
{
this.ModelState.AddModelError("repassword", "确认密码不匹配!");
}
}
else
{
this.ModelState.AddModelError("password", "密码格式不正确!");
}
}
else
{
this.ModelState.AddModelError("username", "用户名格式不正确!");
}
return View();
}
可能这段代码有更高明的做法(不妨告诉我吧?^.^),但是我想,我的这种做法,当涉及到的参数多达N+1个的时候,我会被这么一串参数所“欺负”。
所以为了防止世界被破坏,为了守护世界的和平……
我决定让语法变成这样……
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Register(string id)
{
string username, password, repassword;
var valiForm = this.CreateValiForm();
if (valiForm.Validate(new MatchRange()
{
Name = "username",
ErrorMessage = "用户名格式不正确!",
Minimum = 3,
Maximum = 20
}, out username) &&
valiForm.Validate(new MatchRange()
{
Name = "password",
ErrorMessage = "密码格式不正确!",
Minimum = 3,
Maximum = 50
}, out password) &&
valiForm.Validate(new MatchCompare()
{
Name = "repassword",
CompareName = "password",
ErrorMessage = "确认密码不匹配!",
}, out repassword))
{
// and so on
}
return View();
}
我不知道这样的代码,会不会给你带来“不好”的感觉。像是自己做的饭菜一样,觉得可口诱人,可能到别人的嘴里,什么焦味糊味才会被吃出来了。
最初在写这个验证的时候,我曾考虑在【OnActionExecuting】入手。例如:
[AcceptVerbs(HttpVerbs.Post)]
[MatchRange(Name = "username", ErrorMessage = "用户名格式不正确!", Minimum = 3, Maximum = 20)]
public ActionResult Register(string id)
{
}
最终,我放弃了这个方案,原因是扩展性和控制性不好。
好了,开始去看那些驾驶考题了。如果你长得帅气逼人,请预祝我驾驶顺利通过吧!