博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-基于接口驱动的数据层...
阅读量:7051 次
发布时间:2019-06-28

本文共 3403 字,大约阅读时间需要 11 分钟。

系列回顾

         在前面的文章中,我用了大量的篇幅对UDA及ORM的使用进行了讲解和演示,我们已经知道并熟悉的使用UDA和ORM构建简单的应用,AgileEAS.NET在应用的纵向结构上建议使用分层结构,提出独立数据层,数据层构成以ORM技术为基础、UDA技术做为辅助,共同完成这一系列功能。

 

基于接口开发

        关于基于接口驱动的开发请参考一文,在此不做具体介绍。

接口驱动的数据层

        基于一文所提出的观点,那么我们的数据层的结构将变成如下图所示:

 

        也就是说数据层的消费者BL层或者UI层访问数据层依赖于DAL.Interface,而与具体的实现无关,基于这种理解的扩展,就是我们可以实现不同数据访问层实现的动态替换,如如某一个业务需要运行在基于SQLServer的数据库上,也需要运行的Oracle数据库之上,也可能需要运行在MySQL之上,因为不同数据库之间的细微差别,比如所使用的表名不同、数据库系统的函数、过程使用方式的差异,我们没有做到统一的数据访问层,那么我们就基于接口开发的思想把他分解成一个接口和三个实现。

在开发中如何进行

        在AgileEAS.NET平台中我们提供了数据对象设计器,他能生成基于接口驱动的数据层解决方法,也就是说初始的数据层解决方案我们是可以使用工具生成,有关于数据对象设计器的介绍、使用请参考、、三篇文章,在生成的过程中默认的建议了一个接口层项目和一个实现层项目(根据设计时的数据库环境决定):

 

         需要说明一点的是如果我们需要生成基于接口驱动的数据层,那么我们必须要选中项目选项卡上的是否生成接口层:

 

         然后我们重新输出代码,并且把之前的业务代码迁移到新生成的代码之中,代码结构如下:

 

关键代码分析

        在分析和介绍代码之前我有必要介绍一下演示解决方案中的项目依赖(引用关系):

         数据层消费者项目ClassLib.OrmDemo依赖于数据接口层项目ClassLibDemo.DAL.Interface,而不依赖于具体的实现ClassLibDemo.DAL.SQLServer,而我们之前的案子是ClassLib.OrmDemo依赖于ClassLibDemo.DAL.SQLServer的。

 

        首先我们来看看生成的接口层代码ClassLibDemo.DAL.Interface项目中的一个接口IDALManager: 

 

 1 
   
///
 
<summary>
 2 
   
///
 IDALManager接口,负责业务接口的实例化。
 3 
   
///
 
</summary>
 4 
    
public
 
interface
 IDALManager
 5 
    {
 6 
        IProduct CreateProduct();
 7 
        IProductList CreateProductList();
 8 
 9 
        IProductIn CreateProductIn();
10 
        IProductInList CreateProductInList();
11 
12 
        IProductStore CreateProductStore();
13 
        IProductStoreList CreateProductStoreList();
14 
15 
    }

 

        这个接口是一个与业务无关的接口,即不是我们定义的实体的抽像接口,而是一个抽像实现的实现化管理接口,即它管理干具体工作的实体接口的实例化,IDALManager在ClassLibDemo.DAL.SQLServer项目中有对应的实现DALManager: 

 

 1 
    
///
 
<summary>
 2 
    
///
 DALManager实现,负责业务接口的实例化。
 3 
    
///
 
</summary>
 4 
    
public
 
class
 DALManager : IDALManager
 5 
    {
 6 
        
public
 IProduct CreateProduct()
 7 
        {
 8 
            
return
 
new
 Product();
 9 
        }
10 
11 
        
public
 IProductList CreateProductList()
12 
        {
13 
            
return
 
new
 ProductList();
14 
        }
15 
16 
        
public
 IProductIn CreateProductIn()
17 
        {
18 
            
return
 
new
 ProductIn();
19 
        }
20 
21 
        
public
 IProductInList CreateProductInList()
22 
        {
23 
            
return
 
new
 ProductInList();
24 
        }
25 
26 
        
public
 IProductStore CreateProductStore()
27 
        {
28 
            
return
 
new
 ProductStore();
29 
        }
30 
31 
        
public
 IProductStoreList CreateProductStoreList()
32 
        {
33 
            
return
 
new
 ProductStoreList();
34 
        }
35 
    }

 

        那么IDALManager的实例化由谁负责呢,请看到ClassLibDemo.DAL.Interface项目中类DALHelper: 

 

 1 
   
///
 
<summary>
 2 
   
///
 IDALManager实例化过程。
 3 
   
///
 
</summary>
 4 
   
public
 
class
 DALHelper
 5 
   {
 6 
       
const
 
string
 ConfigKey
=
"
ClassLibDemo.DAL
"
;
 7 
       
public
 
static
 IDALManager DALManager
 8 
       {
 9 
           
get
10 
           {
11 
               
return
 ContextHelper.GetContext().Container.GetComponentInstance(ConfigKey) 
as
 IDALManager;
12 
           }
13 
       }
14 
   }

 

        DALHelper类中只有一个名称为DALManager的只读属性,返回AgileEAS.NET平台IOC容器中的一个名称为ClassLibDemo.DAL的对象,也就是IDALManager接口的实例化由DALHelper调用IOC容器来完成了IDALManager具体实现的动态挂载与延迟绑定,对象设计器为我们生成了以上模式的代码,根据代码我们需要在系统配置中增加如下的对象配置: 

 

系统配置文件

 

        至此为止,我们则可以在任何使用实体接口进行业务时采用如下的写法:

IProductList table = DALHelper.DALManager.CreateProductList();

消费者代码

        当我们需要使用数据接口层中的某个接口进行业务操作的时间,我们需要使用DALHelper.DALManager的特定方法进行实现化抽像的数据层接口,我们只需要修改原有代码中的实体实例化过程的代码,我贴上ClassLib.OrmDemo项目中的ConditionDemo类的代码: 

 

ConditionDemo

 

        按此方法修改ClassLib.OrmDemo中的其他代码,最后编译运行:

 

 

           有关本例子所涉及的数据表结构请参考一文,有关数据对象模型定义文件、文档、DDL脚本请下载:,本文代码下载:。

链接

QQ群:116773358

作者: 
出处:关于作者:有13年的软件从业经历,专注于中小软件企业软件开发过程研究,通过在技术与管理帮助中小软件企业实现技术层面开源节流的目的。熟悉需求分析、企业架构、项目管理。现主要从事基于平台的技术咨询工作,主要服务于医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。如有问题或建议,请多多赐教! 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过 联系我,也可以加入QQ群:113723486、199463175、116773358、116773358、212867943、147168308、59827496、193486983、15118502和大家共同讨论,非常感谢。

    本文转自魏琼东博客园博客,原文链接:http://www.cnblogs.com/eastjade/archive/2010/10/08/1844405.html,如需转载请自行联系原作者

你可能感兴趣的文章
AI进入安防 安防的未来是怎样?
查看>>
《敏捷可执行需求说明 Scrum提炼及实现技术》—— 2.3 要求所有干系人参与
查看>>
Mozilla将从3月31日起实行插件“点击运行”机制
查看>>
《可穿戴创意设计:技术与时尚的融合》一一1.3 可穿戴设备和艺术
查看>>
JavaScript 实现的人脸检测方法
查看>>
Qubes OS 创始人认为英特尔 x86 是有害的
查看>>
《ANSYS Workbench有限元分析实例详解(静力学)》——2.3 工程流程图
查看>>
《现代体系结构上的UNIX系统:内核程序员的对称多处理和缓存技术(修订版)》——1.7 习题...
查看>>
《音乐达人秀:Adobe Audition CC实战222例》——1.2 从双卡录音机到多轨录音软件...
查看>>
年度回顾 看看 2016 年编程语言发展趋势
查看>>
《电路分析导论(原书第12版)》一2.7 电池寿命因素
查看>>
Java异常处理的误区和经验总结
查看>>
在 LinkedIn 之后,微软本周又收购了一家公司
查看>>
C++11新特性中的匿名函数Lambda表达式的汇编实现分析(一)
查看>>
Ubuntu on Windows 10 工作方式全解析
查看>>
《技术的潜能:商业颠覆、创新与执行》一一2.6前路曲折
查看>>
《OSPF和IS-IS详解》一6.3 复习题
查看>>
《脱颖而出——成功网店经营之道》一1.4 网店的特点
查看>>
开发者声称利用 FreeBSD 内核漏洞越狱 PS4
查看>>
API经济打通企业内外互通的任督二脉?
查看>>