基于Net的数据库对象化访问开发框架的构建与应用硕士学位论文

上传人:无*** 文档编号:86546416 上传时间:2022-05-07 格式:DOC 页数:67 大小:1.25MB
返回 下载 相关 举报
基于Net的数据库对象化访问开发框架的构建与应用硕士学位论文_第1页
第1页 / 共67页
基于Net的数据库对象化访问开发框架的构建与应用硕士学位论文_第2页
第2页 / 共67页
基于Net的数据库对象化访问开发框架的构建与应用硕士学位论文_第3页
第3页 / 共67页
点击查看更多>>
资源描述
学校代码: 10246_硕 士 学 位 论 文专 业 学 位基于.Net的数据库对象化访问开发框架的构建与应用院系:软件学院专业:软件工程XX:章称指导戴开宇博士完成日期:20XX9月20日61 / 67目 录摘要IIIABSTRACTIV第一章绪论11.1 研究背景11.2 论文容及意义21.3论文结构3第二章 ORM研究与关键技术介绍42.1 关系模型与对象模型概念42.1.1 关系模型42.1.2 面向对象模型52.2 ORM 技术产生的主要原因62.3.Net平台下ORM底层数据访问技术72.4 远程数据访问技术8第三章 ThinkWide框架需求分析与设计113.1框架需求分析113.1.1 NHibernate 框架优缺点分析113.1.2 iBatis.Net 框架优缺点分析133.1.3 框架需求总结133.2 框架设计目标163.3框架架构设计173.4 与其他主流框架功能对比20第四章 ThinkWide框架的实现204.1框架核心系统模块的详细设计与实现214.1.1多数据库数据访问层的详细设计与实现214.1.2 数据传输服务层的详细设计与实现264.1.3 数据对象封装层的详细设计与实现314.2框架扩展系统模块的设计与实现384.2.1 通用界面组件对象层的设计与实现384.2.2 业务逻辑层的设计与实现404.2.3 用户界面层的设计与实现404.2.4 动态脚本语言层的设计与实现414.2.5 数据库对象代码自动生成工具的实现43第五章 ThinkWide框架的应用455.1 Power分销系统简介455.2 ThinkWide框架在Power分销系统中的应用475.2.1统一开放的数据交互接口475.2.2 更方便的实现BS/CS双架构应用505.2.3 统一的界面应用风格535.2.4 业务可定制化545.3 运行环境555.4 小结56第六章结束语576.1 总结576.2 展望57参考文献59致61摘 要数据库对象化访问即对象-关系映射Object/Relation Mapping,简称ORM,是随着面向对象的软件开发方法发展而产生的。目前基于.Net的ORMapping有很多开源架构。但是一些框架有完善的地方也有不足之处,比如NHibernate过于严谨而造成使用时不灵活,限制很多,特别是在直接使用SQL,存储过程上很不方便,对存储过程支持度差。而iB 小巧灵活但是功能过于简单,对象化程度低,开发效率也较低。另外这些框架都没有在底层直接支持对象的远距离传输功能。由于上述这些原因需要设计一种结合了各个框架优点的新的ORM框架,整个框架设计的主要特点如下:1.实现了全面的对象化数据库访问,支持插件式的可扩展的多数据库访问功能。2.直接支持存储过程对象和视图对象等功能。可以灵活的使用SQL,SQL语句即可以通过管理类自动生成,也可以手动编写。3.在框架部直接支持对象数据远程传输,而且支持多种形式的数据对象传输服务,比如Web Service,WCF,Remoting等传输服务。4.扩展了普通ORM的功能边界,在框架直接支持业务层,界面层等功能,适应性更强,效率更高。所以该框架能够比较有效地解决灵活性和功能性上面的许多问题,使得开发人员在开发效率上面有了较大的提升,在使用上又比较得心应手。同时该框架扩展了一般ORM的概念,支持了远程数据自动传输,统一的界面层等实用功能。本文最后详细阐述了一个应用实例来充分展现框架的应用特性。关键词:数据访问技术,ORM,O/R Mapping,.NET,数据访问框架,快速开发ABSTRACTObject / Relation Mapping is Object-Oriented database access, which is developed along with method of object-oriented software development. There are many open-source ORM framework designs based on .NET currently. Some frameworks are powerful but also minor fault. For example, Nhibernate is too stringent to be flexible, especially in directly usage of SQL, and is not convenient and less supportive during store process. As well, iB is flexible but too simple in function, low level of object-Oriented development, low efficiency and not simple in coding. In addition to many frameworks do not directly support the long-distance transmission object function. Due to these reasons,it needed to design the new framework which combination the advantages of each framework. The whole ORM framework design main features below:1. To realize the comprehensive Object-Oriented database access and support plug-in type extensible database access functions.2. Directly support storing procedures objects and view object, and other functions. Flexibly use SQL statements, which are created automatically by sql management class, or manually.3. Directly support object data remote transmission in internal framework, also support various forms of data objects transmission services, such as Web Service, Remoting, WCF and other transmission services.4. Expand the border of ordinary ORM function, directly support business layer, interface layer in framework with more adaptability, high efficiency.Therefore, this framework can more effectively solve many problems about flexibility and functional. And developers can raise the efficiency of developing program through using it. Meanwhile the framework expanded the general ORM concept, it support the remote data automatically transmission, unified interface layer etc. and other more useful functions.Keywords: Data Access Technology, ORM,O/R Mapping,. NET, data access framework, rapid development第一章 绪论1.1 研究背景数据访问是通过特定函数接口从数据库中查询数据以及保存和修改数据库中的数据。一般而言,数据访问就是对数据库中的数据进行CRUD操作:Create创建、Retrieve检索、Update更新和Delete删除。自从数据库技术诞生以来,数据访问技术就成为应用程序开发的一项重要技术。随着数据库技术的不断发展,数据访问技术也在不断进步1。在数据库出现的早期,开发人员只需要了解正在使用的数据库产品的详尽知识。但数据库产品和技术发展很快。从关系数据库到非关系数据存储区如电子和文件系统,数据访问技术必须始终追随技术的飞速变化。并且,随着客户端服务器及多层应用程序结构的出现,现在开发人员必须了解多种数据访问技术。大多数开发人员花了数年时间学会了许多缩写词所对应的技术,例如,ODBC、DAO、RDO、OLE DB、ADO 和 RDS。现在 Microsoft 已经推出 .NET 框架,并且,随之还有另外一项新的数据访问技术:ADO.NET2。在非微软平台下,还有著名的JDBC。以上的数据访问技术是随着关系型数据库共同发展起来的。它们的一个共同的特点,都和关系数据库的处理方式保持一致,都具有表、查询和数据集等概念。然而随着软件开发技术的不断发展,尤其面向对象技术的广泛运用,数据和程序之间出现了不协调。为了解决这个所谓的阻抗不匹配问题,对象数据库被提了出来,解决了程序和数据不协调的问题。但是这种模式又有点类似早期的数据库访问形式类似。又出现了老问题针对不同的对象数据库产品,需要学习不同数据库访问函数库。由于关系数据库的性能、稳定性、市场份额和厂商支持都要比对象数据库好得多,很多软件系统也是构建于关系数据库上的。所以,为了既获得面向对象处理数据的优点,又能保持原有数据库平台的稳定,一种新的数据访问技术被提了出来对象关系映射技术简称O/R Mapping,ORM。ORM在开发数据库应用的系统中能够极大的提升开发效率,特别是在分层体系结构的系统中,上层的程序执行最终结果都是要操作数据库,而数据库是关系型,不是面向对象的,正是通过对象关系的映射,使我们实现了只对上层对象的操作实现对表的操作,感觉好像没有数据库的存在,上层只需面向对象编程就可以了。方便和快捷是使用ORM的主要目的之一,然而不同的ORM框架设计的目标不同,这就造成了效率和便捷程度上的差异。部分ORM框架,例如NHibernate特别注重完整的对象关系以及强制约束,这方便了程序在不同数据库之间切换和移植,但是这降低了开发的灵活性,不能全面的发挥数据库的视图,存储过程等功能的特长。其他一些ORM框架,例如iB注重开发的灵活性支持直接的SQL应用,这虽然使用方便但是需要编写大量SQL配置文件,特别是框架部也没有提供自动产生SQL和管理SQL的功能,而且在同数据库之间切换比较麻烦需要修改大量配置甚至部分程序。另外,大多数框架都未能在框架部集成远程跨协议,跨广域网的数据访问功能。虽然Web技术能够在框架外部解决部分问题,但是随着网络的发展,特别是移动平台的发展,越来越注重系统部的数据远程访问能力,甚至是跨CS/BS平台应用或者手机平台的框架。基于这些情况如何能够相对平衡的解决这几个方面的问题是当前ORM框架设计的一个重要方向。1.2 论文容及意义论文以对象化数据库访问方式的构建与应用为背景,分析传统的管理信息系统开发中,编写的数据库访问部分代码运行效率低,不易于维护,代码复杂。以及即使使用了一些主流的ORM框架后,虽然有极大的提升效率,代码变得简洁。但是也因为各个ORM框架的设计目标不同,应用的场景和空间都不相同。比如iBatis.Net简单灵活适合小型系统,但是此框架不够自动化,开发繁琐。而NHibernat功能强大,封装完善适用于大型系统,但是此框架不够灵活,比较复杂。另外这些框架都没有在框架底层实现对象数据的远距离传输服务。结合这些情况,提出了基于.Net的数据库对象化访问开发框架。具体来说,论文的主要研究容包括深入的阐述了如何设计和实现插件式、可扩展的多数据库访问支持功能及其原理。支持更多的数据库比如支持主流的网络数据库,Microsoft SQL Server数据库,Oracle数据库,DB2数据库,MySQL数据库等,以及大多数文件型数据库如Access,SQLite等。即使是不知名的第三方数据库,框架也提供了可扩展的插件功能,只需使用者开发支持框架接口的数据驱动程序即可实现扩展。在这一点上要比目前的大多数ORM框架更加灵活开放。并且,研究了在框架部设计和实现透明的,自动化的对象数据传输功能、以及支持多种形式的数据对象传输服务,比如Web Service,WCF,Remoting等传输服务。这种传输服务也是可以切换和配置的,对使用者来说无需增加和修改任何代码就可以实现。这大大方便了开发人员的系统开发以及维护人员的系统维护。另外,论文扩展了一般ORM框架的边界,阐述了在框架部直接集成通用组件层,业务逻辑层,动态脚本语言层等更多实用功能的意义。最后介绍本框架在一个分销系统中的应用,以实际例子来展示本框架的实用和高效。在当今信息化社会,数据库应用系统已深深融入整个社会,随处可以见,比如出行你会使用到交通一卡通系统,消费购物要使用到销售系统、银行系统,上班你要使用考勤系统、办公系统,工厂生产需要使用ERP系统,政府机构需要电子政务系统等等。然而这些数据库应用系统都离不开数据库和数据库访问框架。数据库访问框架对于一个数据库应用系统来说也是基础和中流砥柱。所以一个适用的、高效的数据库访问框架对提高管理系统的开发效率具有比较高的价值。1.3 论文结构本文的容结构如下:第一章 绪论。讨论了数据库访问技术发展,分析了ORM技术产生的历史背景,提出了本文的研究方向和主要容。第二章 ORM研究与关键技术介绍。主要研究了ORM的原理,介绍了关系模型和对象模型,微软的ADO.NET框架等,以及远程数据访问技术。第三章 ThinkWide框架的需求分析与设计。针对当前的主流框架的不同缺点以及分析了主流的应用需求和目的,提出了另一种应用的ORM框架架构设计思路。第四章 ThinkWide框架的实现。根据新的ORM框架的架构设计思路,对框架的核心系统以及扩展系统进行详细的设计和具体实现。第五章 ThinkWide框架的应用。充分利用框架的功能快速的开发分销系统。极大的提升开发效率和系统的性能。第六章 总结和展望。通过对目前系统的总结,提出今后工作的目标和发展方向。第二章 ORM研究与关键技术介绍2.1 关系模型与对象模型概念数据库是根据数据模型建立的,因此数据模型是数据库系统的基础3。它是描述数据、数据联系、数据语义等的集合。在整个数据库系统中数据模型具有非常重要的地位。它既与数据库应用程序相关,又和数据库管理系统相关;既可用于描述应用数据,又可用于描述数据库系统部实现方式。目前数据库系统的数据模型主要包括网状模型、层次模型、关系模型和面向对象数据库模型,其中关系模型的应用围最为广泛3。ORM框架研究主要涉及的数据模型是关系数据模型和面向对象数据模型,下面分别介绍关系模型和面向对象数据模型。2.1.1 关系模型关系数据库都是基于关系数据模型的。关系数据模型是基于记录的。记录是属性的集合,属性是事物的特征的抽取。每个属性有一个域,表示属性的取值围。在关系数据模型中,所有属性的域都必须是原子类型。这就是著名的第一式。它使得记录的属性不能复合和嵌套3。关系是描述对象的一种方法。关系就是笛卡儿积的有限子集3,所以关系是一个二维表。关系模式一般由属性序列和各属性对应的域组成,关系模式是相对固定的,但关系的值是可变的。关系中的属性是无序的。从形式上看,关系相当于一个二维表,并且表中不出现组合数据。表的列对应于属性,而表的行对应于元组。如果某一属性组的值唯一地决定了关系中其他属性的值,并且其任何真子集均无此性质,则该属性组称为该关系的键。一个关系至少有一个键,也可能有多个键。如果关系中的属性或属性组不是本关系的键,而是引用其它关系或本关系的键,则称为此关系的外键。键是关系模型的核心。关系数据库中的关系可以分为基本表,视图表和查询表三种类型,这三种类型的关系以不同的身份保存在数据库中,其作用和处理方法各不相同。关系模型的优势和局限性。关系数据库的主要优点是开发数据关系不复杂,规模小的应用程序比较快捷。关系表达式也容易被理解,操作方式也为大多数人们所熟知,并且有一套较为成熟的关系理论支持数据分析的方法。关系模型表达能力比较强结构简单在处理结构简单的表数据上比较方便4。这些优点使得关系数据模型在许多应用领域成为主要的数据库模型。关系模型的局限性主要表现在以下几个方面。首先,关系模型查询效率比较低,没有解决应用方面的弱点,这种以记录为最基本的独立数据单位,不能很好的面向对象化开发。其次,关系数据库不能以自然地方式表达实体之间地联系。比较抽象不能够更加直观的表现实体之间的联系。关系模型所表达的实体之间的联系不是显式的,而是隐含在关系的公共属性中的,这就使得用户无法方便得到全局的逻辑体系结构。再次,关系模型表达的语义不够丰富。关系模型不能由一表表达出更加复杂对象的语义,这就限制了它在数据类型较多、较复杂的领域的应用。最后,关系模型支持的数据类型非常简单。一般只提供一些简单的数据类型,如整型、实型等一些预定义好的类型,并不提供一些特殊新类型的定义和生成能力。2.1.2 面向对象模型面向对象数据模型即是面向对象方法所建立的数据模型,它包括数据模式,建立在模式上的操作以及建立在模式上的约束7。数据库系统是为了管理大量的数据而产生。传统的关系数据库使用的领域一般都具有结构统一、无嵌套数据类型、面向记录、属性字段都是原子的。但在某些应用下使用关系模式相当繁琐和复杂比如嵌套或者可以继承的对象实体等,因而在这些情况下数据库应用不能充分发挥。寻找新型的数据模型就成了数据库研究的必然方向。在某些情况中实体联系模型和关系模型都不能够方便的建立数据建模,而面向对象数据模型克服了传统数据模型的缺陷。面向对象模型的一般概念主要包括对象及其属性和行为、类及其继承与组合、对象标识、多态性与消息等7。总之,面向对象数据模型比之传统数据模型的根本区别是面向对象模型是面向直接应用的。它提供了丰富的语义和自然的表达方式,方便地直接表达应用领域地事物和它们之间地联系。克服了传统数据模型的主要缺点。面向对象技术的主要优点都在面向对象数据库中得到体现。2.2 ORM 技术产生的主要原因ORM是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。ORM,是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在存中表现为对象,在数据库中表现为关系数据。存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,ORM一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。它能有效避免繁琐的数据访问细节,对象和关系的行列转换都由ORM完成,不需要写过多的数据访问细节代码,面向对象的概念和关系数据之间的映射可抽象成为单个组件的职责,独立于应用程序之外。所以使用O/R Mapping技术的主要优点如下:1数据库结构清晰,便于实现 OOP。由于实现了应用模块对象对数据库对象的完全映射,数据库逻辑模型可以自然且直接地模拟现实世界的实体关系。用户所处的当前物理世界、系统开发者所抽象的系统外部功能,与支持系统功能的部数据库 一一对应,所以用户、开发者和数据库维护人员可以用一致的语言进行沟通。特别是对多数不了解业务的程序开发人员来说,这种将应用对象与相应的数据对象封装在对象统一体中的设计方法,大大减轻了程序实现的难度,使他们只要知道加工的数据及所需的操作即可,而且应用程序大多雷同,可以多处继承由设计人员抽象出来的、预先开发好的各种物理级超类。2数据库对象具有独立性,便于维护。除了数据库表对象与应用模块对象一一对应外,在逻辑对象模型中我们没有设计多重继承的泛化关系,所以这样得到的数据库结构基本上是由父表类和子表类构成的树型层次结构,表类间很少有继承以外的复杂关系,是一个符合局部化原则的结构,从而使数据库表数据破坏的影响控制在局部围且便于修复,给系统开通后的数据库日常维护工作带来便利。3需求变更时程序与数据库重用率高,修改少。在映射应用对象时,除关系映射规化后可能出现一对多的表映射外,大多数应用对象与表对象是一一对应的。我们可以把规化处理后的、由一个应用对象映射出来的多个表看成一个数据库对象。因此当部分应用需求变更时,首先,系统修改可以不涉及需求不变更的部分。其次,变更部分的修改可以基本上只限于追加或删除程序模块或追加新库表,而基本上不必修改原有程序代码或原有库表定义,从而大大减少了工作量,降低了工作难度。对象持久化的基础是对象关系映射理论,如今,面向对象思想已经普及并被普遍采用,而且业务数据的建模采用了面向对象建模方法,但是目前大多数应用系统中使用的是关系数据库,数据的存储也采用关系模型,这就需要一个从对象模型到关系模型的映射过程。本章详细介绍了关系模型和对象模型的基本概念。2.3 .Net平台下ORM底层数据访问技术ORM是一种架构在底层数据访问技术之上的中间层,在.Net平台上的ORM主要使用ADO.NET来和底层数据库交互。ADO.NET的名称起源于ADO,它提供了平台互用性和可伸缩的数据访问。ADO.NET增强了对非连接编程模式的支持,并支持RICH XML。由于传送的数据都是XML格式的,因此任何能够读取XML格式的应用程序都可以进行数据处理。事实上,接受数据的组件不一定要是ADO .NET组件,它可以是基于一个Microsoft Visual Studio的解决方案,也可以是任何运行在其它平台上的任何应用程序25。ADO.NET允许和不同类型的数据源以及数据库进行交互。然而并没有与此相关的一系列类来完成这样的工作。因为不同的数据源采用不同的协议,所以对于不同的数据源必须采用相应的协议。一些老式的数据源使用ODBC协议,许多新的数据源使用OleDb协议,并且现在还不断出现更多的数据源,这些数据源都可以通过.NET的ADO.NET类库来进行连接。ADO.NET提供与数据源进行交互的相关的公共方法,但是对于不同的数据源采用一组不同的类库。这些类库称为Data Providers,并且通常是以与之交互的协议和数据源的类型来命名的。ADO.NET中主要的数据操作类有6大类如下:1Connection 类,用于指明数据库服务器、数据库名字、用户名、密码,和连接数据库所需要的其它参数。Connection类会被Command等类使用,这样就能够知道是在哪个数据源上面执行命令。2Command类,用于执行查询、修改、插入、删除等SQL语句以及执行存储过程等功能。 3DataReader类,用于读取Command对象的SELECT语句得到的结果集。4DataSet类,该类是数据在存中的表示形式。它包括多个DataTable对象,而DataTable包含列和行,就象一个普通的数据库中的表。甚至能够定义表之间的关系来创建主从关系。5DataAdapter类,用于填充DataSet类的数据,或者将DataSet中的数据保到数据库等功能。6DataTable类,实际加载数据的对象类,是DataSet类的组成部分。当连接不同的数据库时ADO.NET会使用不同的数据库操作类,比如连接MS SQL Server数据库时,使用SqlConnection,SqlCommand等一组类,在连接Oracle数据库时使用OracleConnection,OracleCommand等一组类。所以直接使用ADO.NET开发的应用程序在切换不同类型的数据库时将是比较麻烦的,即使是使用了ADO.NET提供的数据库工厂类,也不是非常的方便。2.4远程数据访问技术远程数据访问技术经历了几十年的发展逐渐成熟,从一开始的RADRemote Data Access到分布式的DCOM等。在进入网络技术快速发展的阶段后,老的访问技术逐渐被新崛起的Web Services,Remoting,WCF等技术取代,下文简单介绍一下当前主流的远程数据访问技术。1.Web Services技术Web Services是由企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务。它是一种构建应用程序的普遍模型,可以在任何支持网络通信的操作系统中实施运行。也是一种新的应用程序分支,具有支持自包含、自描述、模块化的应用功能。同时Web Service是一个应用组件,它逻辑性的为其他应用程序提供数据与服务.各应用程序通过网络协议和规定的一些标准数据格式、XML、Soap来访问Web Service,通过Web Service部执行得到所需结果。Web Service可以执行从简单的请求到复杂商务处理的任何功能。一旦部署以后,其他Web Service应用程序可以发现并调用它部署的服务。实际上,WebService的主要目标是跨平台的可互操作性。为了达到这一目标,WebService完全基于XML可扩展标记语言、XSDXMLSchema等独立于平台、独立于软件供应商的标准,是创建可互操作的、分布式应用程序的新平台28。2.Remoting技术Remoting,简而言之,我们可以将其看作是一种分布式处理方式。从微软的产品角度来看,可以说Remoting就是DCOM的一种升级,它改善了很多功能,并极好的融合到.Net平台下。Remoting 提供了一种允许对象通过应用程序域与另一对象进行交互的框架。这也正是我们使用Remoting的原因。为什么呢?在Windows操作系统中,是将应用程序分离为单独的进程。这个进程形成了应用程序代码和数据周围的一道边界。如果不采用进程间通信RPC机制,则在一个进程中执行的代码就不能访问另一进程。这是一种操作系统对应用程序的保护机制。然而在某些情况下,我们需要跨过应用程序域,与另外的应用程序域进行通信,即穿越边界。在Remoting中是通过通道channel来实现两个应用程序域之间对象的通信的。首先,客户端通过Remoting,访问通道以获得服务端对象,再通过代理解析为客户端对象。这就提供一种可能性,即以服务的方式来发布服务器对象。远程对象代码可以运行在服务器上如服务器激活的对象和客户端激活的对象,然后客户端再通过Remoting连接服务器,获得该服务对象并通过序列化在客户端运行。在Remoting中,对于要传递的对象,设计者除了需要了解通道的类型和端口号之外,无需再了解数据包的格式。但必须注意的是,客户端在获取服务器端对象时,并不是获得实际的服务端对象,而是获得它的引用。这既保证了客户端和服务器端有关对象的松散耦合,同时也优化了通信的性能29。3. WCF技术Windows Communication Foundation 是由微软发展的一组数据通信的应用程序开发接口,它是.NET框架的一部分,由 .NET Framework 3.0 开始引入,与 Windows Presentation Foundation 及 Windows Workflow Foundation 一起成为新一代 Windows 操作系统以及 WinFX 的三个重大应用程序开发类库。在 .NET Framework 2.0 以及前版本中,微软发展了 Web Service、Remoting以及基础的 Winsock 等通信支持,由于各个通信方法的设计方法不同,而且彼此之间也有相互的重叠性例如Remoting 可以开发 SOAP, 通信,对于开发人员来说,不同的选择会有不同的程序设计模型,而且必须要重新学习,让开发人员在使用中有许多不便。同时,面向服务架构 也开始盛行于软件工业中,因此微软重新查看了这些通信方法,并设计了一个统一的程序开发模型,对于数据通信提供了最基本最有弹性的支持,这就是 Windows Communication Foundation概念。WCF 由于集合了几乎由 .NET Framework 所提供的通信方法。 从功能的角度来看,WCF完全可以看作是ASMX,.Net Remoting,Enterprise Service,WSE,MSMQ等技术的并集。注:这种说法仅仅是从功能的角度。事实上WCF远非简单的并集这样简单,它是真正面向服务的产品,它已经改变了通常的开发模式因此,利用WCF,就可以解决包括安全、可信赖、互操作、跨平台通信等等需求。开发者再不用去分别了解.Net Remoting,ASMX等各种技术了27。第三章 ThinkWide框架的需求分析与设计3.1框架需求分析对于一个ORM框架,基本的功能需求归纳起来就是创建、读、写、删除对象的操作。底层的存储机制可能是文件数据库、网络数据库等,在大多数的业务应用系统中,尤其是数据结构复杂的业务系统,网络数据库一般是首选。当前主要流行的ORM框架:NHibernate和iBatis.Net。分别代表了2大类框架。3.1.1 NHibernate 框架优缺点分析NHibernate是一个面向.NET环境的对象/关系数据库映射工具,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。NHibernate的目标主要是用于与数据持久化相关的编程任务,能够使开发人员从原来枯燥的SQL语句的编写中解放出来,解放出来的精力可以让开发人员投入到业务逻辑的实现上。对于以数据为中心的程序,开发人员往往是在数据库中使用存储过程来实现商业逻辑,这种情况下NHibernate可能不是最好的解决方案,但对于那些基于.NET,并且能够实现OO业务模型和商业逻辑的中间层应用,NHibernate是最有用的。NHibernate可以帮助用户消除或者包装那些针对特定厂商的SQL代码,并且帮用户把结果集从表格式的表示形式转换成一系列的对象。NHibernate是一个目前应用的最广泛的开放源代码的对象关系映射框架,它对ADO.Net进行了对象封装,使得程序员可以随心所欲的使用对象编程思维来操纵数据库。NHibernate 从数据库底层来持久化你的.Net 对象到关系型数据库。NHibernate 为你处理这些,远胜于你不得不写SQL去从数据库存取对象。你的代码仅仅和对象关联,NHibernat 自动产生SQL语句,并确保对象提交到正确的表和字段中去24。NHibernate体系结构图如下:图2.1 NHibernate体系结构1供持久化服务和持久化的对象。2SessionFactory:它是Session的工厂,是ConnectionProvider的客户。可以持有一个可选的第二级数据缓存,可以在进程级别或集群级别保存的可以在事物中重用的数据。3会话:单线程,生命期较短的对象,代表应用程序和持久化层之间的一次对话。封装了一个ADO.NET连接,也是Transaction的工厂。保存有必需的第一级持久化对象的缓存,用于遍历对象图,或者通过标识符查找对象。4持久化对象其集合:生命期较短的单线程的对象,包含了持久化状态和商业功能。这些可能是普通的对象,唯一特别的是现在从属于且仅从属于一个Session。一旦Session被关闭,它们都将从Session中取消联系,可以在任何程序层自由使用比如,直接作为传送到表现层的DTO,数据传输对象。5临时对象及其集合:目前没有从属于一个Session的持久化类的实例。这些可能是刚刚被程序实例化,还没有来得及被持久化,或者是被一个已经关闭的Session实例化。6事务Transaction :单线程,生命期较短的对象,应用程序用其来表示一批工作的原子操作,它是底层的ADO.NET事务的抽象。一个Session在某些情况下可能跨越多个Transaction事务。7ConnectionProvider:ADO.NET连接工厂的提供者。从底层的IDbConnection抽象而来。对应用程序不可见,但可以被开发者扩展/实现。8TransactionFactory:事务实例的工厂。对应用程序不可见,但可以被开发者扩展/实现。虽然NHibernate框架很强大,封装也比较全面,有它优秀的地方,但是在某些方面中还是有不足的地方,以下总结了NHibernate框架的优缺点。1.主要优点1完全的ORM框架。 NHibernate对数据库结构提供了较为完整的封装,它将数据库模式映射为较完全的对象模型,支持封装,继续机制,功能较强大,比一般的ORM灵活性高。开发人员可以完全按照对象模型操纵数据库。2代码自动生成,减少代码和sql的开发量,使开发人员摆脱开sql,Ado.Net和事务,缓存等底层。 NHibernate的ORM实现了对象和数据库表之间的映射,以及SQL 的自动生成和执行。程序员往往只需定义好了对象到数据库表的映射关系,即可通过NHibernate提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟练把握, NHibernate 会根据制定的存储逻辑,自动生成对应的SQL 并调用ADO.NET接口加以执行。NHibernate有工具可以直接根据数据库模式生成对象类,或者通过在代码中添加属性自动生成配置文件。这些都减少了开发工作量。3较好的文档支持。 NHibernate的代码可读性和文档都比较好。2.主要缺点1较复杂,学习曲线大。2对数据库模式有较高的要求。NHibernate需要数据库有良好的设计和比较完善的约束。3不适合统计查询系统。对于多表连查,复杂的sql实现比较复杂,而且有可能需要借助其他方案。4需要大量的xml配置文件,大大增加了开发和维护的工作量。3.1.2 iBatis.Net 框架优缺点分析iBatis.Net是一种轻型的ORM框架,但是它并不是一种很正统的ORM解决方案。因为它不像NHibernate那样,具备全自动的数据操作,包括查询,插入,更新,删除;也没有像它那样,与数据库的约束关系有紧密的联系。iBatis.Net为我们提供了一种更为灵活的方便的可控的方式去实现类ORM的解决方案。我们需要自己来控制SQL语句,这样做有好处在于,我们可以更灵活地根据我们的需求,编写更加具备性能,功能优势的SQL语句,但它的缺点同样明显,我们还是需要管理和编写SQL语句。我们只需要提供这些SQL语句,和为它提供它所需的参数外,接下来的事情就无需我们参与了。这也是iBatis.Net最核心的功能,也是它为我们所做最多的工作了。根据配置好的SQL语句和参数条件,它会动态生成一条可执行的SQL语句,然后根据具体传进来的参数值,为这些SQL参数提供不同的具体值。然后根据配置好的数据访问驱动,自动执行SQL语句。如果系统比较大的话,可能就需要很多的配置文件了。纵观目前主流的 ORM,都对数据库结构提供了较为完整的封装,提供了从实体类到数据库表的全套映射机制。程序员往往只需定义好了实体到数据库表的映射关系,即可通过ORM提供的方法完成持久层操作。程序员甚至不需要对 SQL 的熟练掌握,ORM会根据制定的存储逻辑,自动生成对应的 SQL 并调用 ADO.Net 接口加以执行。而iBatis.Net的着力点,则在于实体类与 SQL之间的映射关系。也就是说,iBatis.Net并不会为程序员在运行期自动生成 SQL 执行。具体的 SQL 需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定实体类上。使用iBatis.Net提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的对象,这一层与通过 NHibernate等实现的ORM 而言基本一致,而对于具体的数据操作,NHibernate会自动生成SQL 语句,而iBatis.Net则要求开发者编写具体的 SQL 语句。相对NHibernate等ORM机制而言,iBatis.Net以 SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。作为正统ORM实现的一种有益补充,iBatis.Net的出现别具意义。然而同NHibernate框架一样,iBatis.Net框架有优秀的地方,也存在不足的地方。以下总结了iBatis.Net框架的优缺点。e 1.主要优点1在简单事务中也可以使用声明式的事务处理方法,而不必使用容器等设置。2用户根本不需要考虑是简单事务还是分布式事务。它实现一种所谓自动提升事务机制Promotable Transaction,会自动根据事务中涉及的对象资源判断使用何种事务管理器。简而言之,对于任何的事务用户只要使用同一种方法进行处理。2.主要缺点1手写SQL容易出错,工作量比较大。没有提供有效的自动生成工具。2需要大量的xml配置文件,维护的工作量也不小。3.1.3 框架需求总结从上文的分析可以得出,NHibernate主要用于大型系统,实现了完全的对象模型,支持封装,继续机制等,开发人员可以完全按照对象模型操纵数据库。但是其较复杂,学习曲线大。对数据库模式要求较高,需要数据库有良好的设计和比较完善的约束。读取数据效率较低,不适合统计查询系统。而iBatis.Net主要用于小型系统,其特点是简单,实用。但是其必须需要编写SQL,容易出错,也不够自动化。如果用于大型系统其维护量将是非常巨大的。分析各类框架的特点,整合出一个比较实用的框架设计理念,应该支持以下的几种需求:1支持多种数据库,比如主流的数据库MSSQL,Oracle,DB2,My SQL,Access等;2对底层存储机制的完全屏蔽。对象仅仅需要使用存取方法,不必关心对象实体如何实现存储和读取;3对对象集合操作的支持。诸如对象查询操作等经常涉及对象集合的操作,需要提供相应的方法同时返回多个数据集合;4事务的支持。对事务的支持程度有多种选择,可以只支持一般的事务,也可以支持嵌套事务和长事务;5良好的可扩展性。可自由扩展对其他非主流数据库的支持;6提供比较完备的配置方案,包含数据库配置,数据传输配置,以及业务逻辑配置等;7支持多种体系结构。比如对Client/Server 两层体系结构的支持或者Browse/Server 多层体系结构的支持;8支持存储过程对象化访问,多数ORM在存储过程支持上比较薄弱,然而存储过程是大型系统所必须使用的一项技术,只有对其全面的支持才能在大型系统中有较强的实用性;9对视图对象的直接支持,可以提高系统灵活性和查询速度;10支持多数据传输的模式如Web Service ,WCF , Remoting等。11支持直接的SQL 查询。虽然不建议直接使用SQL查询但是多数情况下为了满足业务逻辑的需求必须使用的时候,如果框架支持灵活的SQL查询就能够提供有效的技术支撑。总而言之,ORM的功能应该尽量使的开发者能够减少程序开发工作中繁琐的数据读取、保存、传输等方面的开发量,集中精力实现应用系统的逻辑,而不必在对象数据的存储上分散过多的精力。3.2 框架设计目标通用的ORM框架主要以关系数据库系统作为底层数据库管理系统,在关系数据上实现一层模拟的面向对象层,使得上层应用能够以面向对象思想可靠、方便地存取数据,建立数据转换层可以完成应用层的面向对象的数据模型和底层关系数据库的关系模型的映射,从而实现以对象方式操作这些数据。使得开发人员面对的数据库是面向对象的,而不再是一个关系数据库,它不必关心也根本感觉不到对象所依赖的表以及表之间的关系,而是直接以面向对象的方式对所有应用逻辑对象进行存储、操作。所有的面向对象的语义由转换层自动解释,再转化为关系数据库的具体操作,完成从对象到关系的映射。通过数据库操作层利用ADO.Net 的数据访问功能,可以运行在提供了驱动程序的通用关系数据库上,不依赖特定的关系数据库,使得整个系统在不同的关系数据库管理系统如SQL Server 和Oracle 等数据库之间的移植非常的方便。这也是主流ORM框架的最基本设计目标。传统的ORM框架主要解决了本地或网络数据库的和读取,主要在局域网应用,无法直接支持跨网络协议的应用。本框架设计目标的亮点是在框架底层实现透明的远距离的数据传输服务。通过Web Service ,WCF , Remoting等技术。上层功能模块无需知道到数据通过何种方式传输,也无需知道数据保存在于何处,这一切都由框架自动实现,读取数据和保存数据就如本地文件一样方便和高效,这也为以后扩展云计算、通用数据转换等应用提供了有效的支撑。作为一种ORM框架既要功能强大又要使用简单和灵活。如同NHibernate那样实现比较全面的功能,但是使用上又要如同iB那样简单和灵活。此外由于开发的业务需求千变万化,无穷无尽。作为一种具有较强生命力的框架,必须能够对业务的变化实现较强的适应能力。因此,本框架还需提供一种比较全面和灵活的配置方案。有了配置模块对于快速开发应用系统以及后期的维护系统都有极大的价值和意义。3.3 框架架构设计基于以上的不同框架需求提出了一种ThinkWide 基于.Net的数据库对象化访问开发框架,这是一种支持Net 3.5、C#2.0技术的软件开发框架类库。实现比较完全的ORM功能,能够减少开发人员的工作量,最大程度提升开发效率,同时兼顾灵活性及可伸缩性。是一种相对更加完整的软件应用解决方案,采用了当前比较前瞻性的软件技术,主要包含数据访问层,数据服务层,数据对象封装层,业务层逻辑,以及配置层,界面表示层等。1.主要的功能特点1灵活的O/R映射,更加简洁的代码。相对于NHibernate更加灵活和方便,而相对于iBaist.Net则更加的自动和强大。2提供比较强大的实体类生成工具,免除手写实体的工作量。3动态实体类工厂,运行时动态对象及缓存实体类接口的实现类。4基于Provider模式的可扩展持久化数据库源支持。5支持多种数据库源,提供开放的数据库接口,可以支持任何一种.Net所支持的数据库系统。6基于型的强类型实体持久化及数据访问接口。7基于容器的分布式服务工厂,透明的分布式服务调用和分发。8支持WebService,Remoting,WCF等数据传输服务,而无需修改任何代码。2.系统体系结构图图3.1 ThinkWide框架整体结构图在实际操作过程中,这些层大都可以单独使用。ThinkWide框架采用模块化设计,使用了提高模块访问性能的多种设计模式,每个类层次完成特定的功能,具有很好的高聚、低耦合特性,而且在模块的可扩展性方面也进行了充分的考虑。在尽量满足上面所描述的功能外,ThinkWide框架在结构层次、可扩展性、模块化方面突出了自己的特点。3.4与其他主流框架功能对比和其他主流框架对比,本框架在部分功能上有所创新,特别是在远程数据访问以及支持更多的数据库对象上更加完善。特点如下:1本框架支持多数据传输的模式如Web Service ,WCF , Remoting等。目前iBatis.Net和Nhibernate并不支持此项功能,需要外部扩展才能实现。2更好的支持存储过程对象化访问和视图对象的对象化访问。目前iBatis.Net和Nhibernate并不支持存储过程对象的对象化访问功能。列如下面的代码中Nhibernate调用存储过程,参数customer_name并不是对象的一个属性,需要q.SetString;这样的代码在Customer.hbm.xml里面,增加调用存储过程的配置。 call spCustomer_get_by_name 调用存储过程的C#代码为:ISession session = IQuery q = session.GetNamedQuery;q.SetString;IList cList = q.List;而在本框架中将把参数customer_name设计为存储过程对象SelectCustomerByName的一个属性,调用更加方便。定义SelectCustomerByName类,不需要额外的XML文件。 MFStored publicclassSelectCustomerByName : MFActiveStoredBase MFStoredParameterDirection = ParameterDire
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!