微型项目实践(5):Business层代码分析——实体基类
上一篇中,我们分析了Common中的几个类,这几个类都是辅助用的,其实不太重要,重要使我们今天 要分析的这几个类,包括Entity、IDatabase、IEntityDataAccess,其中Entity作为所有实体类的基类, 更是重中之重,而IDatabase、IEntityDataAccess这两个接口,则是为Entity类服务的。 先看那个熟悉的系统结构图。 Entity、IDatabase、IEntityDataAccess这三个类型位于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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |