一步一步教你使用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
链接
QQ群:116773358

本文转自 agilelab 51CTO博客,原文链接:http://blog.51cto.com/agilelab/603035

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
7月前
|
IDE API 开发工具
拦截|篡改|伪造.NET类库中不限于public的类和方法
本文除了回顾拦截.NET类库中的方法,实现方法参数的篡改、方法返回结果的伪造,再着重介绍.NET类库中非public类及方法如何拦截。
拦截|篡改|伪造.NET类库中不限于public的类和方法
|
4月前
|
C# 数据安全/隐私保护
一款实用的.NET Core加密解密工具类库
一款实用的.NET Core加密解密工具类库
|
4月前
|
存储 文字识别 C#
一个基于百度飞桨封装的.NET版本OCR工具类库 - PaddleOCRSharp
一个基于百度飞桨封装的.NET版本OCR工具类库 - PaddleOCRSharp
|
.NET 开发框架 开发工具
.NET Core类库中读取配置文件
最近在开发基于.NET Core的NuGet包,遇到一个问题:.NET Core中已经没有ConfigurationManager类,在类库中无法像.NET Framework那样读取App.config或Web.config(.NET Core中是appsetings.json)文件中的数据。
1705 0