前面的大量的篇幅已经讲述了,关于系统的配置及如何使用平台提供的相关开发工具来进行应用功能模块的开发,本篇将会开始讲述数据访问层中的相关设计与如何使用数据库
AgileEAS.NET代码生成器生成的DAL层基础之上,进行相关的开发及开发过程当中的一些限制。下面咱们将会开始详细的阐述AgileEAS.NET平台中的关于DAL层的相关设计的工具
原理和思路,及相关的实现方案。开发工具
上面是给出ORM的一个模型图,AgileEAS.NET的ORM实现机制是经过数据模型来完成实体与数据库表的映射,固然可能你们能够理解为经过XML的模型来生成数据库测试
表与实体之间的映射关系。网站
可是其实AgileEAS.NET平台的真正的映射是经过特性+反射的形式来定义的:spa
经过特性+反射来定义数据库数据列与实体属性之间的关系映射,具体的特性定义以下:.net
一、表特性映射定义:设计
二、列映射定义:3d
三、咱们看完了ORM之间映射是经过特性来完成的,下面咱们来分析下每一个实体的基类“DataEntity<T>”的相关定义和说明:orm
这样咱们就分析完毕该基础实体类提供的相关持久化方法,那么咱们在业务逻辑层或者UI层开发或者使用实体时咱们就能够直接使用其中提供的方法,而不用咱们本身去
书写,这极大的提升了咱们的开发效率和速度,而且提升了可维护性等。
一、主要是讲述DAL层中的属性列的使用和定义说明
二、基于现有代码如何添加其余功能。
三、如何使用该DAL层,供其余层来使用。
上面咱们讲述了关于本平台中ORM的实现方案和思路,本节将会开始讲述其中属性的定义方式和内部的实现原理分析:
一、咱们先来看看每一个属性列的定义:
二、查看基类“DataEntity<T>”中的相关GetValue方法的定义:
三、查看基类“BaseDataEntity”中的相关方法定义:
四、经过上面的相关定义咱们能够知道内部的使用,不是字典就是Hashtable,通常来讲推荐HashTable 的实现方式,你们实际的测试过程会发现hashtable的效率是最
高的,可是可能使用起来会有点麻烦。
下面咱们就来基于现有的实体的相关定义之上,好比我如今向定义一个获取最大ID的方法,咱们设计数据库主键列的时候,咱们推荐使
用一个与业务无关的ID而且非自增的列来定义主键,这样能够防止删除一个数据以后,依赖性也同步删除或未同步删除的状况。
五、咱们看看Generat文件夹外的分部类的形式吧,咱们这里已药品字典“Dm_dict”为例:
六、下面咱们来为该类添加一个获取最大流水号的方法GetMaxID():
这样咱们就知道了,如何在实体的内部定义一些实体内部自己的方法,下面咱们来看看如何在业务层BLL来使用DAL层以及UI层如何直接使用DAL层等。
通常来讲使用DAL层的方式无非有以下几种:
一、经过工厂来建立。
二、IOC容器动态反射建立。
三、new对象实例。
系统自己并无提供这样的工厂类或者是泛型方法等,咱们能够在这里提供一个抽象的泛型方法来动态的建立对象,固然其实也是比较简单和容易的。
这样就能够完成一个通用的比较简单的工厂类。
或者经过以下工厂:
还有其余形式的工厂的变种,我这里就不同列出了。咱们这里采用的方式之间是经过new对象实例的形式来建立一个对象实例,固然可能耦合性过高,我这里并无使
用工厂模式,可是我会考虑后续经过重构来完成工厂模式的使用。
1、BLL层使用DAL层:
(1)、添加引用:
(2)、分析Bll层中的相关写法
(3)、具体的BLL类中如何使用DAL层中的类而且使用类中提供的相关方法:
四、非LINQ形式的查询形式:
五、其余的关于实体自己的内部方法的使用,也是如此,我相信你们一使用就能触类旁通。
2、UI层的调用。
通常来讲都不推荐UI层之间调用DAL层中的方法,通常把这些方法放在Bll层,UI层只是调用Bll层中的方法,可是也有一些比较特殊的内容,例如,咱们须要断定指定条
件的对象是否存在或者一些界面相关的验证等,咱们可能就须要新建一个对象实例,这时候推荐使用工厂方法。
通常的调用形式就是如此。固然若是咱们把一些持久化的操做放在业务层来作,那么界面层的就不会出现DAL层中的关于实体的直接调用了,固然我这里仍是演示下如何
在界面层调用DAL层中一些特殊的方法。
基本上其余的方法使用的形式也是相同的,我想你们对这个应该都是比较容易理解的吧。
本篇也是讲述了AgileEAS.NET平台的DAL层的相关设计与分析,说明了ORM的实现方式和原理的简单分析,固然有些内容分析的还不全面,或者还有盲点,还请你们指
出,后续我会更详细的说明和阐述。因为本人水平有限,可能写出来的东西还条例不是特别的清楚,还请你们批评指出。
若是您在使用AgileEAS.NET开发平台中有什么问题,请使用以下几种联系方式或者沟通方式。
一、邮箱方式:
魏琼东: mail.james@qq.com 手机:18629261335 博客:http://eastjade.cnblogs.com/
殷长波:549558408@qq.com 博客: http://www.cnblogs.com/onmyway/
何戈洲:hegezhou_hot@163.com 博客:http://www.cnblogs.com/hegezhou_hot/
二、QQ交流群:
AgileEAS.NET平台交流群:120661978(超级群)[新建] AgileEAS.NET平台交流群:125643764(高级群)[新建] AgileEAS.NET平台交流群:147168308(高级群)[新建]