用户操作
[即时聊天] [发私信] [加为好友]
job_2006ID:job_2006
1082次访问,排名2万外好友3人,关注者6
job_2006的文章
原创 0 篇
翻译 0 篇
转载 26 篇
评论 1 篇
最近评论
xfblue:代码挺好用,用你的登录代码解决了登录问题,发现网上的文章都是说了一堆废话,让人摸不到头脑,原来实现如此简单...
文章分类
收藏
    相册
    博客园
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    转载 微型项目实践(4):Common层代码分析收藏

    新一篇: 微型项目实践(5):Business层代码分析——实体基类 | 旧一篇: 微型项目实践(3):实体代码的生成

    上一篇中,我们生成了实体代码,加入了Business和Common,项目突然变得大了起来,现在我们就来一点点分析。

    system_design

    我们还是从这张系统结构图出发。先来看Common这个DLL,其中所包含的类,如下图所示。

    Common

    1,验证相关类(IValidatable,Validater,ValidateResult,ValidateFailException)

    这四个类主要是在业务层,验证实体数据时使用,每一个实体(Entity)在保存数据时对其自身数据进行验证,以保证绝不让非法数据保存到数据库中,这四个类就是为这一功能服务的。其中验证器(Validater)是这四个类的核心,负责验证的实现。以下这段测试代码(位于DongBlog.Test\Common\Validate\ValidateTest.cs)展示了这该个类的典型用法,即通过AddCondition添加要验证的条件(通常是表达式)和验证失败时显示的错误信息,通过Validate方法取得验证结果(ValidateResult类的实例):

       1:  [TestMethod(), Description("验证失败测试")]
       2:  public void ValidateFailTest()
       3:  {
       4:      Validater validater = new Validater()
       5:          .AddCondition(true, "Error1")
       6:          .AddCondition(false, "Error2")
       7:          .AddCondition(false, "Error3");
       8:   
       9:      ValidateResult validateResult = validater.Validate();
      10:      Assert.IsFalse(validateResult.IsValidated);
      11:   
      12:      //Validate error message
      13:      Assert.AreEqual<int>(2, validateResult.ErrorMessage.Length);
      14:      Assert.AreEqual<string>("Error2", validateResult.ErrorMessage[0]);
      15:      Assert.AreEqual<string>("Error3", validateResult.ErrorMessage[1]);
      16:  }

    核心方法——AddCondition的代码如下(位于DongBlog.Common\Validate\Validater.cs),算法很简单:当给出的表达式为false时,就保存该验证的信息到错误验证信息列表中。唯一值得一提的是,这个方法返回的是this,这样就可以向上面测试中那样,一直AddCondition下去(用过(N)Hibernate的朋友肯定对这种方法很熟悉,呵呵)。

       1:  /// <summary>
       2:  /// 添加验证条件
       3:  /// </summary>
       4:  /// <param name="validateExpression">要验证的表达式</param>
       5:  /// <param name="unValidatedMessage">验证失败的提示信息</param>
       6:  public Validater AddCondition(bool validateExpression, string unValidatedMessage)
       7:  {
       8:      if (!validateExpression)
       9:          _ErrorMessageList.Add(unValidatedMessage);
      10:   
      11:      return this;
      12:  }

    AddCondition还有几个重载的方法,原理一样,大家可以参考代码及测试。

    剩下的一个类:ValidateFailException在保存数据时使用,如果系统对于未经过验证的实体调用了Save方法(这种情况绝不应该发生),则会抛出该异常。

    2,查询相关类(QueryInformation,QueryResult<T>)

    这两个类简单的封装了以下查询条件和查询结果。QueryInformation是所有查询信息的基类,提供了保存分页要求的Begin和Limit,而QueryResult使用泛型封装了查询结果,包括记录总数和满足当前分页条件的记录。这两个类除了属性(设值函数)外,没有任何方法,只是在细节上处理了一下,比如QueryInformation中的Begin和End不能设置为负数等,通过QueryResultTest和QueryInformationTest这两个测试可以了解这两个类的具体用法。

    3,其它类(InvalidDataException,Spell,PasswordBuilder)

    1. InvalidDataException是数据库中出现非法数据时抛出的异常,通常这个异常被抛出就代表数据库在系统外被修改,而且……改错了-.-。
    2. Spell用于汉字字符串查拼音首字母缩写。
    3. PasswordBuilder用于对密码进行MD5加密。

    这三个类结合测试,一看就懂。

    今天就先分析到这里,下一篇中,我们分析Business中的几个类,主要是Entity、IEntityDataAccess和IDatabase。

    代码下载

    发表于 @ 2008年05月10日 13:09:49|评论(loading...)|编辑

    新一篇: 微型项目实践(5):Business层代码分析——实体基类 | 旧一篇: 微型项目实践(3):实体代码的生成

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © job_2006