系列回顾
在前面的文章中,我用了大量的篇幅对UDA及ORM的使用进行了讲解和演示,我们已经知道并熟悉的使用UDA和ORM构建简单的应用,AgileEAS.NET在应用的纵向结构上建议使用分层结构,提出独立数据层,数据层构成以ORM技术为基础、UDA技术做为辅助,共同完成这一系列功能。
基于接口开发
关于基于接口驱动的开发请参考一文,在此不做具体介绍。
接口驱动的数据层
基于一文所提出的观点,那么我们的数据层的结构将变成如下图所示:
也就是说数据层的消费者BL层或者UI层访问数据层依赖于DAL.Interface,而与具体的实现无关,基于这种理解的扩展,就是我们可以实现不同数据访问层实现的动态替换,如如某一个业务需要运行在基于SQLServer的数据库上,也需要运行的Oracle数据库之上,也可能需要运行在MySQL之上,因为不同数据库之间的细微差别,比如所使用的表名不同、数据库系统的函数、过程使用方式的差异,我们没有做到统一的数据访问层,那么我们就基于接口开发的思想把他分解成一个接口和三个实现。
在开发中如何进行
在AgileEAS.NET平台中我们提供了数据对象设计器,他能生成基于接口驱动的数据层解决方法,也就是说初始的数据层解决方案我们是可以使用工具生成,有关于数据对象设计器的介绍、使用请参考、、三篇文章,在生成的过程中默认的建议了一个接口层项目和一个实现层项目(根据设计时的数据库环境决定):
需要说明一点的是如果我们需要生成基于接口驱动的数据层,那么我们必须要选中项目选项卡上的是否生成接口层:
然后我们重新输出代码,并且把之前的业务代码迁移到新生成的代码之中,代码结构如下:
关键代码分析
在分析和介绍代码之前我有必要介绍一下演示解决方案中的项目依赖(引用关系):
首先我们来看看生成的接口层代码ClassLibDemo.DAL.Interface项目中的一个接口IDALManager:
这个接口是一个与业务无关的接口,即不是我们定义的实体的抽像接口,而是一个抽像实现的实现化管理接口,即它管理干具体工作的实体接口的实例化,IDALManager在ClassLibDemo.DAL.SQLServer项目中有对应的实现DALManager:
那么IDALManager的实例化由谁负责呢,请看到ClassLibDemo.DAL.Interface项目中类DALHelper:
DALHelper类中只有一个名称为DALManager的只读属性,返回AgileEAS.NET平台IOC容器中的一个名称为ClassLibDemo.DAL的对象,也就是IDALManager接口的实例化由DALHelper调用IOC容器来完成了IDALManager具体实现的动态挂载与延迟绑定,对象设计器为我们生成了以上模式的代码,根据代码我们需要在系统配置中增加如下的对象配置:
至此为止,我们则可以在任何使用实体接口进行业务时采用如下的写法:
IProductList table = DALHelper.DALManager.CreateProductList();
消费者代码
当我们需要使用数据接口层中的某个接口进行业务操作的时间,我们需要使用DALHelper.DALManager的特定方法进行实现化抽像的数据层接口,我们只需要修改原有代码中的实体实例化过程的代码,我贴上ClassLib.OrmDemo项目中的ConditionDemo类的代码:
按此方法修改ClassLib.OrmDemo中的其他代码,最后编译运行:
有关本例子所涉及的数据表结构请参考一文,有关数据对象模型定义文件、文档、DDL脚本请下载:,本文代码下载:。
链接
QQ群:116773358