快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20

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

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

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

微型项目实践(4):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)

InvalidDataException是数据库中出现非法数据时抛出的异常,通常这个异常被抛出就代表数据库在 系统外被修改,而且……改错了-.-。

Spell用于汉字字符串查拼音首字母缩写。

PasswordBuilder用于对密码进行MD5加密。

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

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

本文配套源码

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号