【我的V日志】2010年1月29日星期五

2010129日星期五

琢磨了一下,从今天起,开始写日志了。毕竟我写这个类库(框架?)已经长达半年多了,修修订订,增增删删,整个过程我想写下自己的心得体会。

就像我写类库一样,我最初只是想写一个便于与数据库之间的交互访问,到今天扩展到七八十个类,坦白说,连我自己都没想到。我的想法很就简单,将来透过自己的日志,恍悟当时的代码含义。不得不说,随着类库的扩增中,我有点力不从心了。尤其是家里的生意忙,最近又要学习驾驶(笔试)。

这个月是值得纪念的一个月,首先是我踏入了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)

        {

        }

最终,我放弃了这个方案,原因是扩展性和控制性不好。

好了,开始去看那些驾驶考题了。如果你长得帅气逼人,请预祝我驾驶顺利通过吧!

posted @ 2010-01-29 19:40  Treenew Lyn  阅读(464)  评论(0编辑  收藏  举报