快速业务通道

微型项目实践(5):Business层代码分析——实体基类

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

上一篇中,我们分析了Common中的几个类,这几个类都是辅助用的,其实不太重要,重要使我们今天 要分析的这几个类,包括Entity、IDatabase、IEntityDataAccess,其中Entity作为所有实体类的基类, 更是重中之重,而IDatabase、IEntityDataAccess这两个接口,则是为Entity类服务的。

先看那个熟悉的系统结构图。

微型项目实践(5):Business层代码分析——实体基类

Entity、IDatabase、IEntityDataAccess这三个类型位于Business层中。该层目前的类图如下:

微型项目实践(5):Business层代码分析——实体基类

从图中可以看到,Business层包含Blog和BlogClass这两个实体类,他们都继承于Entity类;每个实体 类(包括Entity)都对应一个Entension类,这个类自然就是存放该类相关的Extension方法的地方,通常 是对IQueryable和IEntityAccess接口的扩展;另外IDatabase和IEntityAccess两个接口定义了数据库访 问的方法。

一、Entity类。Entity是所有实体类的基类,是一个模板类不能是结构体的泛型类。它为所有的实体 类提供了ID、TimeStamp和IsNew的属性,Validate、Save和Delete方法,每个方法又包含实际操作 ValidateAction、SaveAction和DeleteAction。

1,属性:

ID和TimeStamp属性是抽象属性,之所以这样,是因为Linq的继承目前还不是很成熟,所以我们把ID和 TimeStamp的具体信息推迟的每个实体类(使用代码生成),这样,对于Linq来说,就是一个不存在继承 的实体体系。另外,ID和TimeStamp是只读的,Linq可以通过反射设置字段的内容,所以我们把ID和 TimeStamp设置为只读,只由Linq负责这两个字段的值,防止类外部的修改,这一技巧也可以用于其它不 允许类外部修改的属性(即只包括get方法的属性)。IsNew方法是基于ID字段判断的,参看以下代码。由 于ID是只读的,所以我们可以安全的通过判断ID是否为0来识别该字段是new出来的还是从数据库中读取出 来的。

  1: /// <summary>
  2: /// 新实体的ID取值
  3: /// </summary>
  4: public const int NEW_ENTITY_ID = 0;
  5: /// <summary>
  6: /// 取得实体是否是新实体
  7: /// </summary>
  8: public bool IsNew
  9: {
 10:   get { return ID == NEW_ENTITY_ID; }
 11: }

2,方法:

Entity提供了Validate、Save和Delete三个方法,每个方法又包含可以被子类重写的实际操作: ValidateAction、SaveAction和DeleteAction。两两之间通常是这样子的:

  1: /// <summary>
  2: /// 验证
  3: /// </summary>
  4: /// <param name="database">数据库</param>
  5: /// <returns>验证结果</returns>
  6: public ValidateResult Validate(IDatabase database)
  7: {
  8:   if (database == null)
  9:     throw new ArgumentNullException("database");
 10: 
 11:   var validater = new Validater();
 12:   ValidateAction(validater, database);
 13:   return validater.Validate();
 14: }
 15: /// <summary>
 16: /// 验证动作
 17: /// </summary>
 18: /// <param name="validater">验证器</param>
 19: /// <param name="database">数据库</param>
 20: protected virtual void ValidateAction(Validater validater, IDatabase database) { }

即Validate等入口方法提供了诸如验证参数等得共同操作,而提供给子类可以重写的Action方法。三 个方法中比较特别的是Save方法,它在执行Action前,会先调用Validate方法,以保证保存进数据库的数 据全部是合法数据。如下:

  1: public void Save(IDatabase database)
  2: {
  3: 

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号