一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-基于接口驱动的数据层

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
简介:

系列回顾

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

image

 

基于接口开发

        关于基于接口驱动的开发请参考DoNET企业架构应用-基于接口开发介绍以及应用场景和案例一文,在此不做具体介绍。

接口驱动的数据层

        基于DoNET企业架构应用-基于接口开发介绍以及应用场景和案例一文所提出的观点,那么我们的数据层的结构将变成如下图所示:

image

 

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

在开发中如何进行

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

image

 

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

~R56HWFZYZW7L]0@{D4$_MR

 

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

6UH1%TI12FUWRZH{]CNN~4P

 

关键代码分析

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

image
         数据层消费者项目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中的其他代码,最后编译运行:

image
 

 

           有关本例子所涉及的数据表结构请参考基于AgileEAS.NET平台基础类库进行应用开发-总体说明及数据定义一文,有关数据对象模型定义文件、文档、DDL脚本请下载:http://files.cnblogs.com/eastjade/demo.db.doc.sql.rar,本文代码下载:DAL.Demo1.rar

链接

一步一步教你使用AgileEAS.NET基础类库进行应用开发-系列目录

AgileEAS.NET平台开发指南-系列目录

AgileEAS.NET应用开发平台介绍-文章索引

AgileEAS.NET平台应用开发教程-案例计划

AgileEAS.NET官方网站

敏捷软件工程实验室

QQ群:116773358


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


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

相关文章
|
架构师 开发者
【悬念揭秘】DDD:那片隐藏在软件深处的业务乐土——.NET项目如何借力领域驱动设计,让复杂业务逻辑迎刃而解?
【8月更文挑战第28天】领域驱动设计(DDD)在.NET项目中的应用聚焦于将业务领域知识与软件开发紧密结合,通过构建清晰的领域模型管理复杂业务逻辑。DDD的核心概念包括限界上下文、聚合、实体等,确保模型与实现的统一。在.NET中,通过CQRS和事件源等模式提高系统响应性和可扩展性,实现业务事件驱动的解耦与协作。DDD不仅是一种设计方法,更是要求开发者深入理解业务的文化,助力.NET项目应对复杂挑战,实现业务与技术的融合。
197 6
|
人工智能 开发框架 量子技术
【专栏】.NET 技术:驱动创新的力量
【4月更文挑战第29天】.NET技术,作为微软的开发框架,以其跨平台、开源和语言多样性驱动软件创新。它在云计算、AI/ML、混合现实等领域发挥关键作用,通过Azure、ML.NET等工具促进新兴技术发展。未来,.NET将涉足量子计算、微服务和无服务器计算,持续拓宽软件开发边界,成为创新的重要推动力。掌握.NET技术,对于开发者而言,意味着握有开启创新的钥匙。
148 0
|
安全 Linux 开发者
【专栏】.NET 技术:驱动开发变革的力量
【4月更文挑战第29天】本文介绍了.NET技术的起源、核心特性和应用场景。始于2002年的.NET,旨在解决开发效率和兼容性问题,历经.NET Core和.NET 5的进化,实现了跨平台支持。其核心特性包括跨平台、面向对象、安全可靠及高效性能。广泛应用在企业级应用、互联网应用、游戏开发及科学计算等领域,持续推动软件开发创新与变革。
84 0
|
缓存 NoSQL 大数据
4款.NET开源的Redis客户端驱动库
4款.NET开源的Redis客户端驱动库
289 0
|
传感器 机器人 物联网
使用.NET IoT驱动超声波测距传感器
最近买的一堆传感器到货了,先来把玩一下超声波测距传感器。超声波传感器一般用于机器人,小车的避障,物体的测距,液位检测,停车检测等领域。
171 3
使用.NET IoT驱动超声波测距传感器
|
边缘计算 人工智能 Ubuntu
使用.Net驱动Jetson Nano的OLED显示屏
最近几年,边缘计算的需求急剧爆发。人工智能、物联网和 5G 的演进给边缘计算带来了无限的可能性。
389 0
使用.Net驱动Jetson Nano的OLED显示屏
【.Net Micro Framework PortingKit - 08】GPIO驱动
要点亮LED灯或获得输入IO的状态应该是比较容易的,打开端口时钟,然后读写相关的GPIO寄存器就可以了,但是要实现一个输入中断,就要费些周折了
530 0
【.Net Micro Framework PortingKit – 09】串口驱动
虽然在PC机中,串口渐行渐远,但是在嵌入式领域,串口仍可以说是如日中天,因为它造价低廉、并且编程也比较方便,在没有显示屏或输入设备的系统上,串口更是不可或缺,和超级终端一道,共同解决了信息显示和输入问题。
596 0
|
内存技术 移动开发
【.Net Micro Framework PortingKit–11】NandFlash驱动开发
对.Net Micro Framework系统来说,正常情况下Flash(包括NandFlash和NORFlash)分为六个区
704 0
【.Net Micro Framework PortingKit – 12】SysTick驱动开发
SysTick驱动有三个功用,一是我们上面所说的多任务和多线程支持;二是获得系统当前Tick,以此实现延时等待
690 0