基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 统一数据访问

简介:

 统一数据访问(Uniform Data Access,简写为UDA)用于隔离系统和数据平台,使系统可以在各种数据库平台上自由移植。该数据库访问接口要求通过该接口对数据库进行访问的模块要提交标准的SQL语句,而不仅仅是对当前数据库有效的语句。

      统一数据访问与数据层分离是相互相成的两个概念和实践、统一数据访问为数据层分离提供数据库访问环境及接口的独立、接口驱动及数据层体系结构的一致性提供保证。

      统一数据访问内部自动包装ADO.NET,具体使用何种数据库则在外部由系统管理员定义在配置文件中。统一数据访问接口内部提供对数据库连接对象、数据命令对象、事务对象等的管理,因此客户端不需要自己管理这些对象,只需要提交数据库命令即可。

      在UDA中主要的数据结构为“结果数据”。结果数据是数据库操作的结果的包装。如果是一个查询命令,则可能返回一个IDataReader对象、一个DataSet对象、一个DataTable对象、一个IDictionary对象、一个IList对象、一个数据对象(在数据对象管理中定义的数据结构)或者一个单纯的结果等,当然用户可以要求以XML的格式返回数据。

      AgileEAS.NET提供了IDataAccessor和IDataConntion两个接口:

ClassDiagram2      

      IDataAccessor提供了对数据的操作:查询结果和执行SQL语句两种基本操作,同时提供了SQL批处理、代理查询和事务委托操作,而IDataConnetion相当于为IDataAccessor提供了一个数据库执行环境。

     下面详细的看一下两个接口:

     IDataAccessor:

IDataAccessor

    

      IDataConnetion:

IDataConnection

 

      数据访问器(IDataAccessor)是统一数据访问中进行数据存取的接口,他生存于数据库环境IDataAccessor之中,客户端只需通过该访问器提供的方法并为这些方法提供适当的参数进行数据库操作。访问器内部自动在当前数据库连接上创建数据库命令,并包装返回的结果。

      目前访问器在传回查询结果时,加入了一步装箱操作,返回统一类型的数据(object),使用者需求使用拆箱,然后得到具体的数据结果。

      因为在访问数据库时定了一个原则:IDataAccessor不得随意变更IDataConnetion的状态,我们知道在访问数据库时需要打开和关闭数据库操作,所以在IDataAccessor执行SQL命令过程上,首先判读IDataConnetion是否打开,如果未打开则执行IDataConnetion.Open()并在执行SQL完毕进行IDataConnetion.Close()。

	bool open = this.Connection.IsOpen;
	if(!open)
		this.Connection.Open();

	try
	{
		//执行SQL
	}
	finally
	{
		if(!open)
			this.Connection.Close();
	}

      而在执行查询命令时有一种返回结果IDataReader,这种状态需要数据库一直保持打开状态,所以我们增加了一个委托方法DelegateQuery,委托DataReaderHandler定义如下:

    /// <summary>
    /// 定义以DataReader作为结果返回时的数据访问委托。
    /// </summary>
    /// <remarks>
    /// 该委托的实例可以由Accessor.DelegateQuery方法在内部调用,这样委托实例就不需要考虑关闭DataReader的问题。
    /// </remarks>
    public delegate void DataReaderHandler(System.Data.IDataReader dataReader);


      在数据库事务这一块,提供了除正常的开启事务、关闭事务之后,我更推荐一种事务委托和方式去执行,IDataAccessor提供了TransactionExecute方法,其委托TransactionHandler定义:

    /// <summary>
    /// 定义数据库操作的事务处理委托。该委托将代表客户执行数据库事务,这样使用者不需要考虑事务的开始和结束。
    /// </summary>
    public delegate int TransactionHandler(IDataAccessor Accessor);

      目前实现了SQL数据库(SQLServerConnection、SQLServerAccessor)、OleDb数据库(OleDbConnection、OleDbAccessor)、ODBC数据库(ODBCConnection、ODBCAccessor),ORACLE数据库由单独的数据库访问服务程序集实现。

      具体的数据访问例程我将在后面展示:

     

     下面来说一下AgileEAS.NET中的ORM。

 

      QQ群:15118502

 

链接:AgileEAS.NET应用开发平台介绍

       AgileEAS.NET之敏捷并行开发方法

 

       敏捷软件工程实验室


作者:魏琼东 
出处: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/07/01/1768813.html,如需转载请自行联系原作者


相关文章
|
1月前
mvc.net分页查询案例——DLL数据访问层(HouseDLL.cs)
mvc.net分页查询案例——DLL数据访问层(HouseDLL.cs)
9 0
|
7月前
|
关系型数据库 MySQL Linux
.NET开源免费、企业级、可商用内容管理系统 - SSCMS
.NET开源免费、企业级、可商用内容管理系统 - SSCMS
102 0
|
29天前
|
数据采集 存储 监控
.NET智慧手术室管理平台源码
术前访视记录单、手术风险评估表、手术安全核查表、自费药品或耗材、麻醉知情同意书、麻醉记录单、分娩镇痛记录单、麻醉复苏单、术后镇痛记录单、术后访视记录单、压伤风险评估量表、手术清点记录单、护理记录单、输血护理记录单。
30 0
|
1月前
|
SQL 数据库
使用ADO.NET查询和操作数据
使用ADO.NET查询和操作数据
9 0
|
1月前
深入.net平台的分层开发
深入.net平台的分层开发
58 0
|
2月前
|
SQL 开发框架 .NET
ASP.NET WEB+EntityFramework数据持久化——考核练习库——1、用户管理系统(考点:查询列表、增加、删除)
ASP.NET WEB+EntityFramework数据持久化——考核练习库——1、用户管理系统(考点:查询列表、增加、删除)
67 0
|
4月前
|
Web App开发 开发框架 .NET
asp.net基于WEB层面的云LIS系统平台源码
结合当今各检验科管理及实验室规模的不同状况,充分吸收当今IT科技的最新成就,开发出以高度产品化、功能强大、极易实施操作、并不断升级换代为主要特点的LIS系统。彻底解决检验科的信息孤岛,全面实现全院信息互通互联、高度共享,并为检验科的规范化管理提供了有力工具。
41 0
|
4月前
|
Oracle 关系型数据库 数据管理
.NET医院检验系统LIS源码,使用了oracle数据库,保证数据的隔离和安全性
LIS系统实现了实验室人力资源管理、标本管理、日常事务管理、网络管理、检验数据管理(采集、传输、处理、输出、发布)、报表管理过程的自动化,使实验室的操作人员和管理者从繁杂的手工劳作中解放出来,提高了检验人员的工作效率和效益,降低了劳动成本和差错发生率。
|
4月前
|
Web App开发 开发框架 .NET
asp.net基于WEB层面的区域云LIS系统平台源码
asp.net基于WEB层面的区域云LIS系统平台源码
49 1
|
4月前
|
开发框架 小程序 数据可视化
基于.NET、Uni-App开发支持多平台的小程序商城系统 - CoreShop
基于.NET、Uni-App开发支持多平台的小程序商城系统 - CoreShop