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

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 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
相关文章
|
4月前
|
人工智能 前端开发 Devops
.NET技术在现代开发中的作用:.NET技术的核心价值、在现代应用开发中的实际应用、以及面临的挑战与未来趋势。
.NET技术是软件开发领域的核心力量,本文从其核心价值、实际应用及未来挑战三方面进行探讨。它支持多种语言,提供强大的开发工具和丰富的类库,并具备跨平台能力。在现代应用开发中,.NET广泛应用于企业级系统、Web应用、移动应用、云服务和游戏开发等领域。面对性能优化、容器化、AI集成等挑战,.NET持续创新以适应不断发展变化的技术环境。
67 4
|
7月前
|
开发框架 .NET 中间件
七天.NET 8操作SQLite入门到实战 - (2)第七天Blazor班级管理页面编写和接口对接
七天.NET 8操作SQLite入门到实战 - (2)第七天Blazor班级管理页面编写和接口对接
151 7
|
4月前
|
架构师 开发者
【悬念揭秘】DDD:那片隐藏在软件深处的业务乐土——.NET项目如何借力领域驱动设计,让复杂业务逻辑迎刃而解?
【8月更文挑战第28天】领域驱动设计(DDD)在.NET项目中的应用聚焦于将业务领域知识与软件开发紧密结合,通过构建清晰的领域模型管理复杂业务逻辑。DDD的核心概念包括限界上下文、聚合、实体等,确保模型与实现的统一。在.NET中,通过CQRS和事件源等模式提高系统响应性和可扩展性,实现业务事件驱动的解耦与协作。DDD不仅是一种设计方法,更是要求开发者深入理解业务的文化,助力.NET项目应对复杂挑战,实现业务与技术的融合。
64 6
|
4月前
|
开发框架 前端开发 .NET
七天.NET 8操作SQLite入门到实战 - (3)第七天Blazor学生管理页面编写和接口对接
七天.NET 8操作SQLite入门到实战 - (3)第七天Blazor学生管理页面编写和接口对接
|
4月前
|
开发框架 .NET Linux
2款高效的.NET二维码生成类库
2款高效的.NET二维码生成类库
|
4月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
50 0
|
5月前
|
监控 C#
.NET】聊聊 IChangeToken 接口
【7月更文挑战第2天】‘IChangeToken`接口在.NET Core中用于提供变更通知服务,包括`hasChanged`属性来检查是否已变更,`activeChangeCallbacks`属性确认是否执行回调,以及`registerChangeCallback`方法用于注册变更时执行的回调函数。示例代码展示了如何监视文件变化并响应。`ChangeToken.OnChange`方法允许持续监控并每次变更时触发回调。`IChangeToken`和相关实现广泛用于监听配置变化或其他动态数据更新的场景。
|
4月前
|
XML 开发框架 数据格式
.Net Core 开发框架,支持多版本的类库
.Net Core 开发框架,支持多版本的类库
87 0
|
5月前
|
人工智能 开发框架 Devops
.NET技术概览:** 本文探讨了.NET的核心特性,包括多语言支持、Common Language Runtime、丰富的类库和跨平台能力,强调其在企业级、Web、移动及游戏开发中的应用。
【7月更文挑战第4天】.NET技术概览:** 本文探讨了.NET的核心特性,包括多语言支持、Common Language Runtime、丰富的类库和跨平台能力,强调其在企业级、Web、移动及游戏开发中的应用。此外,讨论了.NET如何通过性能优化、DevOps集成、AI与ML支持以及开源策略应对未来挑战,为开发者提供强大工具,共创软件开发新篇章。
56 3
|
5月前
|
人工智能 前端开发 Devops
NET技术在现代开发中的影响力日益增强,本文聚焦其核心价值,如多语言支持、强大的Visual Studio工具、丰富的类库和跨平台能力。
【7月更文挑战第4天】**.NET技术在现代开发中的影响力日益增强,本文聚焦其核心价值,如多语言支持、强大的Visual Studio工具、丰富的类库和跨平台能力。实际应用涵盖企业系统、Web、移动和游戏开发,以及云服务。面对性能挑战、容器化、AI集成及跨平台竞争,.NET持续创新,开发者应关注技术趋势,提升技能,并参与社区,共同推进技术发展。**
43 1