微型项目实践(4):Common层代码分析-阿里云开发者社区

开发者社区> 吞吞吐吐的> 正文

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

简介:
+关注继续查看

上一篇中,我们生成了实体代码,加入了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。

代码下载

本文转自冬冬博客园博客,原文链接:http://www.cnblogs.com/yuandong/archive/2008/05/05/1184125.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Spring AOP 源码分析——创建代理对象
1.简介 与筛选合适的通知器相比,创建代理对象的过程则要简单不少,本文所分析的源码不过100行,相对比较简单。在接下里的章节中,我将会首先向大家介绍一些背景知识,然后再去分析源码。
998 0
Ext架构分析(3)--Widget之父Component:总结
在这里,我们引用Ext Overview中的Component life cycle对组件的功能进行相应的总结: [list=1] 配置项对象生效: 组件对象的构造器会把全部的配置项传入到其子类中去,并且进行下列所有的步骤。
687 0
Dubbo实战案例01【需求分析及项目创建】
Dubbo实战案例01【需求分析及项目创建】
18 0
MaxCompute(原ODPS) Studio 2.7.0 版本发布,让代码效率更高
新功能: 作业管理: 显示作业排队队列 作业管理: 显示正在执行作业的历史状态转换序列 SQL编辑器: 跳转到 UDF 和 Table 的声明 SQL编辑器: 代码折叠和括号匹配支持 SQL编辑器: 常用语句模板支持 UDF: UDF 项目模块的 Maven 支持 UDF: UDF 一
3326 0
MaxCompute在电商场景中如何进行漏斗模型分析
本文以某电商案例为例,通过案例为您介绍如何使用离线计算并制作漏斗图。
3411 0
应用MaxCompute实现变压器局部放电相位分析
应用MaxCompute实现变压器局部放电相位分析 1 引言 随着智能电网建设的不断推进,智能化电力一次设备和常规电力设备的在线监测都得到了较大发展并成为趋势,监测数据日益庞大,电力设备在线监测系统在数据存储和处理方面面临巨大的技术挑战。
6020 0
4852
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载