【文档说明】软件框架的设计与实现解析课件.ppt,共(101)页,1.256 MB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-45347.html
以下为本文档部分文字说明:
软件框架的设计与实现王映辉博士(后),教授,博导软件框架的设计与实现一、软件框架概述二、TqmNET框架简介三、TqmNET框架详解四、TqmNET框架应用实例软件框架的设计与实现1.1软件框架定义1.2软件框架分类一、软件框架概述E-mail
:luopf_xaut@163.com42022/11/25一、软件框架概述1.1软件框架定义框架(Framework):是对问题的部分解决,也是用户集成构件的架构。框架描述了应用系统中所有的构件、构件之间的交互、连接件以及如何将构
件和连接件结合的规则。对于框架的具体定义,我们可以从不同角度去理解。E-mail:luopf_xaut@163.com52022/11/25一、软件框架概述1.1软件框架定义从构件的角度看软件框架:是整个系统或部分
系统的可重用设计由一组抽象构件及构件实例间的相互作用方式组成是由开发人员定制的应用系统的骨架E-mail:luopf_xaut@163.com62022/11/25一、软件框架概述1.1软件框架定义从程序设计的角度看软件框架:定义了一个应
用程序的骨架提供可以放置于该骨架中的标准用户界面实现E-mail:luopf_xaut@163.com72022/11/25一、软件框架概述1.1软件框架定义从领域应用的角度看软件框架:在领域内完成业务需求的功能集合的一个概念模型可以
根据用户需要,来完成某些参数的定制而得到一个新的应用系统软件框架的设计与实现1.1软件框架定义1.2软件框架分类一、软件框架概述E-mail:luopf_xaut@163.com92022/11/25一、软件框架概述1.2软件框架分类
根据“应用软件——中间件——基础设施”可将软件框架分为:基础设施框架:对系统基础功能的接近完整的实现,并留有扩展余地。例如:网络编程基础设施框架ACE(AdaptedCommunicationEnvironment)。中间件框架:对一些常用的中
间件按需定制或是按需扩展而成。例如:Borland的VisiBroker就是一种实现对象请求代理的框架。应用框架:面向应用领域中应用系统的骨架,但它并不提供完整的应用软件系统的全部。例如:Web应用框架Struts,微软的MFC。E-mail:luopf_xaut@163.
com102022/11/25一、软件框架概述1.2软件框架分类根据扩展点机制的不同可将软件框架分为:白盒框架:有利于面向对象的继承和多态机制支持扩展点。黑盒框架:强调接口机制。灰盒框架:上述两种框架的一个混合体,实际
中使用的最为广泛。E-mail:luopf_xaut@163.com112022/11/25一、软件框架概述1.2软件框架分类根据应用范围的不同可将软件框架分为:技术框架:致力于解决某一技术领域内的通用技术问题,
并提供定制和扩展机制。技术框架又称为水平框架,所谓水平强调的是通用性、使用范围的广泛性。例如:Hibernate就是解决ORM问题的技术框架。业务框架:在特定业务领域内通用的框架。业务框架又称为垂直框架,所谓垂直就是强调专门化。例如:一个网络管理软件的垂直框架针对网络管理这个专门领域
提供了完善的功能。软件框架的设计与实现一、软件框架概述二、TqmNET框架简介三、TqmNET框架详解四、TqmNET框架应用实例软件框架的设计与实现2.1TqmNET框架概述2.2TqmNET框架总体结构2.3TqmNET框
架结构的内部组成2.4TqmNET框架相关技术二、TqmNET框架简介E-mail:luopf_xaut@163.com142022/11/25二、TqmNET框架简介2.1TqmNET框架概述TqmNET框架是一个基于.NET平台开发的应用框架,用户可
以通过对该框架进行扩展来完成具体系统的开发。E-mail:luopf_xaut@163.com152022/11/25二、TqmNET框架简介2.1TqmNET框架概述TqmNET框架采用三层模型,主要包括以下三个组成部分:基于MVC模式的表示层:该部分采用应用较为广泛的MVC模式,并且实现
了页面表示和页面表示逻辑的分离。简单业务逻辑的业务逻辑层:该部分将对数据库表的Selecte、Delete、Update、Add操作看做简单的业务逻辑包含在该部分中。用户可以对该部分进行扩展来完成所需的业务逻辑功能。
通用数据访问层:该部分采用.NET本身提供的ADO.NET技术,是一个适用于当今流行数据库的通用数据访问层。E-mail:luopf_xaut@163.com162022/11/25二、TqmNET框架简介2.1TqmNET框架概
述TqmNET框架具有以下几个特点:良好的扩展性:提供多个接口用户进行扩展。通用性强:能够适应不同用户的不同需求。分层结构:各层间的耦合性低,可维护性强,并且能根据用户不同需求进行相应的改变。软件框架的设计
与实现2.1TqmNET框架概述2.2TqmNET框架总体结构2.3TqmNET框架结构的内部组成2.4TqmNET框架相关技术二、TqmNET框架简介E-mail:luopf_xaut@163.com182022/11/
25二、TqmNET框架简介2.2TqmNET框架总体结构三层结构从下至上分别为:数据访问层(DataAccessLayer)业务逻辑层(BusinessLogicLayer)表示层(PresentationLayer)TqmNE
T框架采用的是三层结构。E-mail:luopf_xaut@163.com192022/11/25二、TqmNET框架简介2.2TqmNET框架总体结构表示层业务逻辑层数据访问层SQLSERVERORACLE也称为WEB层,主要负责同客户交互。这一层向用户提供服务,提供WEB界面
,接受用户的输入,调用业务功能等,完成用户的需求。在这个层次里面没有业务逻辑的处理,而只是调用业务层面提供的服务。三层结构示意图E-mail:luopf_xaut@163.com202022/11/25二、TqmNET框架简介2.2TqmNET框架总体结构表示层业务逻辑层数据
访问层SQLSERVERORACLE业务逻辑层是整个系统的核心,它与这个系统的业务(领域)有着密切的联系,业务逻辑层接受从表示层输入的用户请求,并根据相应的业务逻辑处理这些请求,如果有访问数据层的必要,那么就将相应的请求传入数据层,并将数据层返回的数据解释并组合成用户所需的信息,返回给表示层
。三层结构示意图E-mail:luopf_xaut@163.com212022/11/25二、TqmNET框架简介2.2TqmNET框架总体结构表示层业务逻辑层数据访问层SQLSERVERORACLE数据访问层有时候也被称为数据层,它的主要作用就是负责数据库的访问。对数据库的访问简单地
说就是实现对数据表的Select等操作。广义的数据访问层包括了数据库。三层结构示意图E-mail:luopf_xaut@163.com222022/11/25二、TqmNET框架简介2.2TqmNET框架总体结构用户表示层业务逻辑层数据访问层数据库用户请求程序响应查询请
求/执行操作结果集/影响行数三层结构交互示意图从图的用户和左边箭头看起:(1)用户使用系统时,首先面对的是表示层,如果用户进行一个对数据库查询的操作,请求首先会发送到业务逻辑层。E-mail:luopf_xaut@163.com232022/11/25二、TqmNET框架简介2.2TqmNE
T框架总体结构用户表示层业务逻辑层数据访问层数据库用户请求程序响应查询请求/执行操作结果集/影响行数三层结构交互示意图(2)业务逻辑层接受用户提交的数据,接着业务逻辑层将用户请求递交给数据访问层。E-mail:luopf_xaut@163.c
om242022/11/25二、TqmNET框架简介2.2TqmNET框架总体结构用户表示层业务逻辑层数据访问层数据库用户请求程序响应查询请求/执行操作结果集/影响行数三层结构交互示意图(3)数据访问层充当业务逻辑层
与数据库之间的一个桥梁,把请求递交给数据库,不应该在这一层再去做一些数据校验的工作,来自业务逻辑层的数据应该被认为是无误的。E-mail:luopf_xaut@163.com252022/11/25二、TqmNET框架简介2.
2TqmNET框架总体结构用户表示层业务逻辑层数据访问层数据库用户请求程序响应查询请求/执行操作结果集/影响行数三层结构交互示意图(4)数据库进行查询后将结果集返回给数据访问层,接着再返回给业务逻辑层,最后呈现给用户。软件框架的设计与实现2.1TqmNET框架概述2.2Tqm
NET框架总体结构2.3TqmNET框架结构的内部组成2.4TqmNET框架相关技术二、TqmNET框架简介E-mail:luopf_xaut@163.com272022/11/25二、TqmNET框架简介2.3TqmNE
T框架结构的内部组成UI页面布局文件页面样式文件页面表示逻辑表示层业务逻辑处理类业务逻辑层创建数据对象的工厂DALFactory数据访问层数据访问接口IDAL数据实体ModelOracleDALSQL
ServerDAL通用数据访问类库DBUtility(不同数据库有不同的实现)数据库OracleSqlServer页面代码文件TqmNET框架结构的内部组成图E-mail:luopf_xaut@163.com282022/11/25二
、TqmNET框架简介2.3TqmNET框架结构的内部组成采用面向接口编程的思想,将一些通用的数据库操作抽象成方法封装在IDAL程序集中,不同的数据库通过不同的DAL程序集来实现接口,不同的DAL程序集又对应着不同的访问数据库的方法,这些方法封装在DBUtility程序集中。数据访问层还要
提供方法供业务逻辑层调用,使业务逻辑层能够通过该层访问数据库。UI页面布局文件页面样式文件页面表示逻辑表示层业务逻辑处理类业务逻辑层创建数据对象的工厂DALFactory数据访问层数据访问接口IDAL数据实体ModelOracleDALSQLS
erverDAL通用数据访问类库DBUtility(不同数据库有不同的实现)数据库OracleSqlServer页面代码文件E-mail:luopf_xaut@163.com292022/11/25二、TqmNET框架简介2.3TqmNET框架结构的内部
组成该部分包含一系列业务逻辑处理类。该部分在TqmNET框架中的地位比较特殊,它不仅需要通过数据访问层的DALFactory程序集来创建数据对象,以调用数据访问层提供的方法来完成业务逻辑,还需要提供方法供表示层调用完成业务逻辑处理。UI页面布局文件页面样式文件页面表示逻辑表示层业务逻辑处理类业
务逻辑层创建数据对象的工厂DALFactory数据访问层数据访问接口IDAL数据实体ModelOracleDALSQLServerDAL通用数据访问类库DBUtility(不同数据库有不同的实现)数据库OracleSqlServer页面代码文件E-mail:luopf_
xaut@163.com302022/11/25二、TqmNET框架简介2.3TqmNET框架结构的内部组成该部分用于实现与用户的交互,包括UI和页面逻辑。UI用于给用户提供可视化的界面,由一系列的控件通过拖拽组合而
成;页面逻辑用于控制界面的显示、调用业务逻辑及控制页面跳转等,由控件的事件组成。当用户在UI上单击某个控件时,触发该控件的事件,而在这些事件中包含着对业务逻辑层提供的方法的调用,通过这些方法来完成用户所请求的业务逻辑操作。UI页面布局文件页面样式文件页面表示逻辑表示层业务逻辑处理类业务逻辑层创建数
据对象的工厂DALFactory数据访问层数据访问接口IDAL数据实体ModelOracleDALSQLServerDAL通用数据访问类库DBUtility(不同数据库有不同的实现)数据库OracleSq
lServer页面代码文件软件框架的设计与实现2.1TqmNET框架概述2.2TqmNET框架总体结构2.3TqmNET框架结构的内部组成2.4TqmNET框架相关技术二、TqmNET框架简介E-mail:luopf_xaut@163.com322022/11/25二、TqmNET框架简介2.4
TqmNET框架相关技术TqmNET框架采用的技术如下:.NETADO.NET.NET反射机制MVC模式E-mail:luopf_xaut@163.com332022/11/25二、TqmNET框架简介2.4TqmNET框架相关技术.NET.NET框架为所有.NET应用程序提
供了一个全新的运行环境和基础类库,它具有非常强大的功能,具有如下特征:统一编程模型:使用同样的编程基础类库多样的开发语言:C#,VB.NET,VC++.NET等简化开发:可以实现跨语言继承简化应用部署和管理:程序集包含引用信息提供强壮安全的运行环境:CLR提供了垃圾收集、类型安全
检查和异常处理等机制E-mail:luopf_xaut@163.com342022/11/25二、TqmNET框架简介2.4TqmNET框架相关技术ADO.NETADO.NET是.NET平台提供的数据访问技术,ADO.NET的实现依赖于.NET框架提供的数据访
问服务的类。使用ADO.NET可以实现访问数据库、XML文件等多种数据源。核心组件是Dataset:实现独立于任何数据源的数据访问,即一次性将数据从数据源读入本地缓存。Datasct包含一个或多个DataTable对象的集合E-mail
:luopf_xaut@163.com352022/11/25二、TqmNET框架简介2.4TqmNET框架相关技术.NET反射机制反射机制是.NET提供的非常重要的功能,通过反射机制,.NET可以访问应用程序元数据。我们可以将
反射简单的定义为在运行时发现类型信息的能力,反射通常具有以下用途:使用Assembly来定义和加载程序集使用Module获取包含模块的程序集以及模块中的类等使用ConstructorInfo获取构造函数的名称、参数、访问修饰符和实现详细信息等E-mail:luopf_xaut@163
.com362022/11/25二、TqmNET框架简介2.4TqmNET框架相关技术MVC模式MVC英文即Model-View-Controller,即把一个应用的输入、处理、输出流程按照Model、View、Controlle
r的方式进行分离。模型封装应用程序状态相应状态查询应用程序功能通知视图改变视图解释模型模型更新请求发送用户输入给控制器允许控制器选择视图控制器定义应用程序行为用户动作映射成模型更新选择响应的视图状态查询通知改变状态改变视图选择用户请求方法
调用事件MVC模式E-mail:luopf_xaut@163.com372022/11/25二、TqmNET框架简介2.4TqmNET框架相关技术MVC模式模型封装应用程序状态相应状态查询应用程序功能通知视图改变视图解释模型模型更新请求发送
用户输入给控制器允许控制器选择视图控制器定义应用程序行为用户动作映射成模型更新选择响应的视图状态查询通知改变状态改变视图选择用户请求方法调用事件MVC模式视图(View)代表用户交互界面,对于Web应用来说,可以简单的理解为HTML界面。MVC设计模式对于视
图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业务流程的处理。E-mail:luopf_xaut@163.com382022/11/25二、TqmNET框架简介2.4TqmNET框架相关技术MVC模式模型封装应用程序状态相应状态查询应
用程序功能通知视图改变视图解释模型模型更新请求发送用户输入给控制器允许控制器选择视图控制器定义应用程序行为用户动作映射成模型更新选择响应的视图状态查询通知改变状态改变视图选择用户请求方法调用事件MVC模式模型(Model):就是业务流程/状态的处理以及业务规则的制定。业务流程的处理过
程对其它层来说是黑箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是MVC最主要的核心。把应用的模型按一定的规则抽取出来很重要。数据模型主要指实体对象的数据保存(持续化)。E-mail:luop
f_xaut@163.com392022/11/25二、TqmNET框架简介2.4TqmNET框架相关技术MVC模式模型封装应用程序状态相应状态查询应用程序功能通知视图改变视图解释模型模型更新请求发送用户输入给控制器允许控制器选择视图
控制器定义应用程序行为用户动作映射成模型更新选择响应的视图状态查询通知改变状态改变视图选择用户请求方法调用事件MVC模式控制(Controller)可以理解为从用户接收请求,将模型与视图匹配在一起,共同完成用户的请求。控制层并不做任何的数据处理。软件框架的设计与实现一、
软件框架概述二、TqmNET框架简介三、TqmNET框架详解四、TqmNET框架应用实例软件框架的设计与实现3.1TqmNET框架的数据访问层3.2TqmNET框架的业务逻辑层3.3TqmNET框架的表示层三、TqmNET框架详解E-mail:luopf_xaut@163.com422022/11
/25三、TqmNET框架详解3.1TqmNET框架的数据访问层TqmNET框架中数据访问层的模块结构如图所示:IDALDALDBUtilityModelDALFactory创建各种数据访问的工厂数据访问层
的接口实现IDAL接口访问数据库利用ADO.NET对象执行数据库操作数据访问层所需要的数据对象TqmNET框架的数据访问层模块结构图E-mail:luopf_xaut@163.com432022/11/25三、TqmNE
T框架详解3.1TqmNET框架的数据访问层IDALDALDBUtilityModelDALFactory创建各种数据访问的工厂数据访问层的接口实现IDAL接口访问数据库利用ADO.NET对象执行数据库操作数据访
问层所需要的数据对象TqmNET框架的数据访问层模块结构图DBUtility程序集:主要是帮助DAL层对象访问数据库,并且负责从Web.config配置文件中取出数据库连接字符串。包括两个类:•ConnectionHel
per类负责从Web.config配置文件中来获取数据库连接字符串。•Helper类是抽象类,其中定义了一系列静态的方法用于完成不同的数据库访问操作;其对不同的数据库而言是不同的;体现复用的原则。E-mail:luopf_xaut@163.com442022/11/25三、Tqm
NET框架详解3.1TqmNET框架的数据访问层IDALDALDBUtilityModelDALFactory创建各种数据访问的工厂数据访问层的接口实现IDAL接口访问数据库利用ADO.NET对象执行数据库操作数据访问层所需要的数据对象TqmNET框架的数据访问层模块结构图Model程
序集:主要包含了数据实体类。每个实体类对应数据库中的一张数据表,这些类仅有属性组成,每个属性对应数据表中的一列,每个对象实例对应数据表中的一行,它们只是作为数据的载体,以便于业务逻辑针对相应的数据表进行读/写操作。这些类并不具备数据访
问能力。E-mail:luopf_xaut@163.com452022/11/25三、TqmNET框架详解3.1TqmNET框架的数据访问层IDALDALDBUtilityModelDALFactory创建各种数据访问的工厂数据访问层的
接口实现IDAL接口访问数据库利用ADO.NET对象执行数据库操作数据访问层所需要的数据对象TqmNET框架的数据访问层模块结构图IDAL程序集:定义了数据访问逻辑接口。数据访问逻辑主要是基本的数据库操作,并没有具体的实
现过程。•将数据实体与相关的数据库操作分离出来的设计,符合面向对象的精神。•体现了“职责分离”的原则,将数据实体与其行为分开,使得两者之间的依赖减弱。•体现了“抽象”的精神,抽象的接口模块,与具体的数据库访问实现完全隔离•保证了系统的可扩展性,同时也保证了数据库的可移植性。E
-mail:luopf_xaut@163.com462022/11/25三、TqmNET框架详解3.1TqmNET框架的数据访问层IDALDALDBUtilityModelDALFactory创建各种数据访问的工厂数据访问层的接口实现IDAL接口访问数据库利用ADO.NET对象执行数据库操作数
据访问层所需要的数据对象TqmNET框架的数据访问层模块结构图DAL程序集:针对具体的数据库而言,实现了IDAL中定义的数据访问接口。•形成针对具体数据库操作的SQL语句•调用DBUtility程序集中的H
elper类来完成对数据库的访问操作。E-mail:luopf_xaut@163.com472022/11/25三、TqmNET框架详解3.1TqmNET框架的数据访问层IDALDALDBUtilityMode
lDALFactory创建各种数据访问的工厂数据访问层的接口实现IDAL接口访问数据库利用ADO.NET对象执行数据库操作数据访问层所需要的数据对象TqmNET框架的数据访问层模块结构图DALFactory程序集
:主要是利用反射机制动态地创建DAL程序集的类的实例,并将这个DAL层的实例的引用返回给调用它的业务逻辑层对象。有两个类:•DataCache类用于创建缓存。•DataAccess类完成以下功能:利用C#中反射机制动态创建DAL程序集的类的实例,供业
务逻辑层调用;利用配置文件Web.config来实现数据库的移植;从DataCache中创建相应的缓存实例。软件框架的设计与实现3.1TqmNET框架的数据访问层3.2TqmNET框架的业务逻辑层3.3TqmNET框架的表示层三、TqmNET框架详解E-mail:luopf_xaut@163
.com492022/11/25三、TqmNET框架详解3.2TqmNET框架的业务逻辑层TqmNET框架中业务逻辑层的模块结构如图所示:BLLIDALModelDALFactory包含一系列业务逻辑处理类TqmNET框架的业务
逻辑层的模块结构图E-mail:luopf_xaut@163.com502022/11/25三、TqmNET框架详解3.2TqmNET框架的业务逻辑层包含了一系列的业务逻辑处理类。在业务逻辑处理类中,通过实例化数据访问对象,然后调用数据访问对象的方法,对数据实体类进行相应的操作,最终完
成对数据库的操作。采用TableModule模式:将整个数据表看作是一个完整的对象,获得的对象是DataSet对象。有关TableModule模式的详细介绍,参见《企业应用架构模式》一书软件框架的设计与实现3.1TqmNET框架的数据访问层3.2Tq
mNET框架的业务逻辑层3.3TqmNET框架的表示层三、TqmNET框架详解E-mail:luopf_xaut@163.com522022/11/25三、TqmNET框架详解3.3TqmNET框架的
表示层TqmNET框架中表示层的模块结构如图所示:WebPagesBLLModel包括UI和页面表示逻辑TqmNET框架的表示层的模块结构E-mail:luopf_xaut@163.com532022/11/25三、TqmN
ET框架详解3.3TqmNET框架的表示层TqmNET框架的表示层分为两部分:UI——即用户接口,它是真正的可视化部分。•不包含任何逻辑•由表示逻辑决定显示何种信息。•在TqmNET框架,UI包括页面布局文件、页面样式文件以及图
片等元素。页面表示逻辑——负责与表示有关的逻辑.•如页面如何条件性跳转等。•在TqmNET框架,页面表示逻辑包含在页面代码文件中。•页面表示逻辑通过调用业务逻辑层中的业务逻辑类来完成相应的业务逻辑操作。E-mail:luopf_xaut@163.
com542022/11/25三、TqmNET框架详解3.3TqmNET框架的表示层TqmNET框架的表示层中MVC模式的应用:View包括了一系列的aspx文件、css文件和图片,用于给用户提供良好的交互
界面;Controller就是XX.aspx.cs文件,在其中包含了一系列的业务逻辑来完成实际业务;Model就是业务逻辑层和数据访问层的全部,用于向View和Controller提供数据和业务功能。E-
mail:luopf_xaut@163.com552022/11/25三、TqmNET框架详解3.3TqmNET框架的表示层TqmNET框架的表示层中MVC模式的应用:当用户在View中输入某个数据时来对Model进行更新时,View将该用户请求发送给Controller,Contr
oller将会响应该请求;Controller将用户动作映射成Model更新,并通知Model进行状态改变;Model通过程序功能,按照一定规则进行状态改变之后,将会通知View进行更新,完成用户的请求。软件框架的设计与实现一、软件框架概述二、Tq
mNET框架简介三、TqmNET框架详解四、TqmNET框架应用实例软件框架的设计与实现4.1TQM系统概述4.2TQM系统的数据访问层实现4.3TQM系统的业务逻辑层实现4.4TQM系统的表示层实现四、TqmNET框架应用实
例E-mail:luopf_xaut@163.com582022/11/25四、TqmNET框架应用实例4.1TQM系统概述工时管理系统(简称TQM系统)是基于TqmNET框架开发的一套针对大型制造企业的工时管理系统。工时定额管理系统(TQM)综合查询分析工时统计报表管理热表
处理工时管理零星工时管理废品工时汇总统计内协工时汇总统计外协工时汇总统计完工产品计划工时统计特殊项目管理模块工时统计管理模块现行工时管理标准工时管理计划工时管理工时定额管理模块零组件项目BOM管理工序工时定额信息管理工时定额台帐管理非
分工项目工时管理工时原始记录统计其它系统管理模块系统设置基础信息维护工装工时管理模块TQM系统功能模块图软件框架的设计与实现4.1TQM系统概述4.2TQM系统的数据访问层实现4.3TQM系统的业务逻辑层实现4.4TQM系统的表示层实现四、TqmNET
框架应用实例E-mail:luopf_xaut@163.com602022/11/25四、TqmNET框架应用实例4.2TQM系统的数据访问层的实现TQM系统在数据库的设计上采用了数据分别存放在多个同时提供服务的数据库服务器上的方法;根据用户
对业务的需求,将一些关联不紧密的功能模块所涉及到的数据存放在不同的数据库中;数据库就可以部署到不同的数据库服务器上并且同时提供数据服务;TQM系统选用Oracle数据库;在系统运行的过程中,用户可以动态创建数据库,这类新创建的数据库具有相同的结构,但数据库名称不同。TQM系统的数
据库设计:E-mail:luopf_xaut@163.com612022/11/25四、TqmNET框架应用实例4.2TQM系统的数据访问层的实现程序集包含:ConnectionHelper.cs:获取数据库连接字符串;Orac
leHelper.cs:实现了针对Oracle数据库的数据操作类OracleHelper。DBUtility程序集的实现:E-mail:luopf_xaut@163.com622022/11/25四、TqmNET框
架应用实例4.2TQM系统的数据访问层的实现定义了ConnectionHelper类。该类定义了一个方法GetConnectionString,它有一个string类型的参数DBTag该类访问Web.config获取DBTag所对应的连
接字符串,并将它返回给调用它的对象DBUtility程序集的实现:ConnectionHelper.cs的实现:ConnectionHelper类图E-mail:luopf_xaut@163.com632022/11/25四、TqmNET框架应用实例4.2TQM
系统的数据访问层的实现Web.config中的连接字符串示例如下:<connectionStrings><addname="SYSDBConn"connectionString="DataSource=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=
TCP)(HOST=cf-pageserver-t)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=SYSDB)));userid=SYSDB_USER;password=SYSDB_USER;"/>……………………</connection
Strings>DBUtility程序集的实现:ConnectionHelper.cs的实现:字符串配置文件节E-mail:luopf_xaut@163.com642022/11/25四、TqmNET框架应用实例4.2TQM系
统的数据访问层的实现ConnectionHelper类的示例代码如下:publicabstractclassConnectionHelper{///<summary>///静态方法,根据DBTag标志获取相应的连接字
符串///</summary>///<paramname="DBTag">数据库名称标志</param>///<returns>连接字符串</returns>publicstaticstringGetConnectionString(stringDBTag){stringconnectionS
tring=ConfigurationManager.ConnectionStrings[DBTag].ConnectionString;if(connectionString!=null){returncon
nectionString;}}DBUtility程序集的实现:ConnectionHelper.cs的实现:函数说明的写法获取当前应用程序默认配置的ConnectionStringsSection数据获取为连接定义的应用程序连接字符串E-mail:luopf_xaut@16
3.com652022/11/25四、TqmNET框架应用实例4.2TQM系统的数据访问层的实现DBUtility程序集的实现:OracleHelper.cs的实现:定义了OracleHelper类,该类定义了一系列静态方法。程序运行时DAL层实例将数据库连接字符串、SQL语句传
给OracleHelper类,调用该类中的相关方法。这些方法在实现时利用了ADO.NET中关于Oracle数据库的操作对象,根据数据库连接字符串连接到指定数据库,并将SQL语句交由数据库执行,然后将执行结果返回给调用该方法的DAL层对象。E-mail:luopf_xaut@1
63.com662022/11/25四、TqmNET框架应用实例4.2TQM系统的数据访问层的实现DBUtility程序集的实现:OracleHelper.cs的实现:OracleHelper类的部分代码示例如下
:publicabstractclassOracleHelper{publicOracleHelper(){}///<summary>///执行SQL语句,返回影响的记录数///</summary>///<paramname="SQLString">SQL语
句</param>///<paramname="connectionString">连接字符串</param>///<returns>影响的记录数</returns>publicstaticintExecuteSql(stringSQLString,strin
gconnectionString){//使用OracleConnection类建立数据库连接using(OracleConnectionconnection=newOracleConnection(connectionString));{//使用OracleC
ommand类完成数据库执行的SQL语句using(OracleCommandcmd=newOracleCommand(SQLString,connection));E-mail:luopf_xaut@163.com672022/11/25四、TqmNET框架应用实例4.2TQM系统的数据访问
层的实现DBUtility程序集的实现:OracleHelper.cs的实现:{try{//打开数据库连接connection.Open();//对连接对象执行SQL语句introws=cmd.ExecuteNonQuery();
returnrows;}catch(System.Data.OracleClient.OracleExceptionE){//捕获到异常后,关闭数据库连接,抛出异常connection.Close();thrownewException(E.Message);
}}}}…………}针对Connection执行SQL语句并返回受影响的行数E-mail:luopf_xaut@163.com682022/11/25四、TqmNET框架应用实例4.2TQM系统的数据访问层的实
现Model程序集的实现:Model程序集中利用一个文件夹来对应一个数据库每个文件夹下有以数据库中表或视图名字命名的类文件Model程序集结构图E-mail:luopf_xaut@163.com692022/11/25四、TqmNET框架应用实例4.2TQM系统的数据访问层的实现M
odel程序集的实现:每一个类有若干个私有字段,每个私有字段正好对应数据表中的一列。私有字段的类型要与数据表中该列的类型相对应。每一个类还有供外部使用的公共属性,这些公用属性的类型与私有字段相对应。在这些公共属性中使用C#中的set和get访问器来为私有字段进行赋值或者获取
私有字段的值,这样调用者只是对这些公共属性进行操作而不会涉及到类所对应的私有字段。Model程序集中的类描述了这个类所对应的数据表的数据实体。E-mail:luopf_xaut@163.com702022/11
/25四、TqmNET框架应用实例4.2TQM系统的数据访问层的实现Model程序集的实现:Model程序集中的示例代码,以类SYSINIT_USERINFO为例。publicclassSYSINIT_USERINFO{publicSYSINIT_USERINFO(){}privateint_u
serid;//用户idprivatestring_useraccounts;//用户名帐号………………publicintUSERID{set{_userid=value;}get{return_userid;}}publicstringUSERACCOU
NTS{set{_useraccounts=value;}get{return_useraccounts;}}………………}E-mail:luopf_xaut@163.com712022/11/25四、TqmNET框架应用实例4.2TQM系统的数据访问层的实现IDAL程序集的实现:数
据访问接口。对应数据库中的每一张数据表或视图,该程序集中均有一个与之相对应的接口,在这个接口定义了对这张数据表的Select、Insert、Update、Delete等常用操作。业务逻辑层要访问数据库中的某张表时,就调用定
义好的Select、Insert、Update、Delete等方法。优点:使业务逻辑层不关注具体的SQL语句如何写,而只是通过调用方法就可以获得相应操作,在一定程度上实现了数据与业务逻辑的分离。E-mail:luopf_xaut@163.com722022/11/25四、Tq
mNET框架应用实例4.2TQM系统的数据访问层的实现IDAL程序集的实现:以SYSINIT_USERINFO为例说明接口的实现,代码如下:namespaceIDAL.SYSDB{publicinterfaceISYSINIT_USERINFO{///<summary>///是否存在该
记录///</summary>boolExists(stringUSERACCOUNTS);///<summary>///获得数据列表///</summary>///<paramname=“strWhere”>需要符合的条件</param>DataSe
tGetList(stringstrWhere);……………………………………………………}}E-mail:luopf_xaut@163.com732022/11/25四、TqmNET框架应用实例4.2TQM系统的数据访问层的实现DAL程序集的实现:只实现了访问Oracle
数据库的DAL程序集OracleDAL;OracleDAL程序集中的类实现了其对应的IDAL接口中所定义的方法;实现了接口后的OracleDAL程序集中所含类中的方法不会被随意改变;OracleDA
L也是每张数据库表或视图对应一个OracleDAL类。E-mail:luopf_xaut@163.com742022/11/25四、TqmNET框架应用实例4.2TQM系统的数据访问层的实现DAL程序集的实现:以SYSINIT_USERINFO为例说明OracleDAL程
序集中类的实现,示例代码如下:publicclassSYSINIT_USERINFO:ISYSINIT_USERINFO{privatestaticstringconnectionString=ConnectionHelper.GetConnectionString("SYSDBC
onn");//SYSDB库的连接字符串publicDataSetGetList(stringstrWhere){StringBuilderstrSql=newStringBuilder();strSql.Append("selectUSERID,USERACCOUNTS,USERPWD
,USERNAME,USERDEPARTMENT,USERPOST,ISEFFECT");strSql.Append("FROMSYSINIT_USERINFO");if(strWhere.Trim()!=""){strSql.Append("where"+strWhere);}strSql
.Append("orderbyuserid");returnOracleHelper.Query(strSql.ToString(),connectionString);}…………}调用Connect
ionHelper中的方法实现IDAL中的方法调用OracleHelper中的方法E-mail:luopf_xaut@163.com752022/11/25四、TqmNET框架应用实例4.2TQM系统的数据访问层的实现DALFactory程序集的实现:TQM系统中
DALFactory程序集所含两个类文件:DataAccess.cs;DataCache.cs。E-mail:luopf_xaut@163.com762022/11/25四、TqmNET框架应用实例4.2TQM系统的数据访问层的实现DALFact
ory程序集的实现:DataCache.cs文件的实现文件中包含DataCache类,该类用于创建缓存,示例代码如下:namespaceDALFactory{///<summary>///缓存相关的操作类///</summa
ry>publicclassDataCache{///<summary>///获取当前应用程序指定CacheKey的Cache值///</summary>///<paramname="CacheKey"></param>///<returns
></returns>//**********外部触发:DALFactory\DataAccess\CreateObjectpublicstaticobjectGetCache(stringCacheKey){System.Web.Caching.Ca
cheobjCache=HttpRuntime.Cache;returnobjCache[CacheKey];}获取当前应用程序的CacheE-mail:luopf_xaut@163.com772022/11/2
5四、TqmNET框架应用实例4.2TQM系统的数据访问层的实现DALFactory程序集的实现:DataCache.cs文件的实现文件中包含DataCache类,该类用于创建缓存,示例代码如下:///<summary>///设置当前应用程序指定C
acheKey的Cache值///</summary>///<paramname="CacheKey"></param>///<paramname="objObject"></param>//**********外部触发:DALFactory\DataAccess\Cr
eateObjectpublicstaticvoidSetCache(stringCacheKey,objectobjObject){System.Web.Caching.CacheobjCache=HttpRuntime.Ca
che;objCache.Insert(CacheKey,objObject);}}}向Cache对象插入项。使用此方法改写具有相同key参数的现有Cache项。E-mail:luopf_xaut@163.com782
022/11/25四、TqmNET框架应用实例4.2TQM系统的数据访问层的实现DALFactory程序集的实现:DataAccess.cs文件的实现DataAccess.cs文件中包含了DataAccess类。在类DataAccess中要为O
racleDAL程序集中的每一个类定义一个方法,用于创建该类的实例,这些类的格式相同,返回值为IDAL程序集中对应的接口类型,类名字以Create加OracleDAL程序集中类的名字命名即可。E-mail:luopf_xaut@163.com792022/11/25四、T
qmNET框架应用实例4.2TQM系统的数据访问层的实现DALFactory程序集的实现:DataAccess.cs文件的实现以SYSINIT_USERINFO对应的方法CreateSYSINIT_USERINFO()为例,其示例代码如下:na
mespaceDALFactory{publicsealedclassDataAccess//不可被继承的类{//选择使用DAL的方式是ORACLE还是SQLSERVERprivatestaticreadonly
stringAssmeblyName=ConfigurationManager.AppSettings["DAL"];privatestaticobjectCreateObject(stringAssmeblyName,stringCacheKey){objectobjType=DataC
ache.GetCache(CacheKey);获取Web.config中文件节<appSettings><addkey=“DAL”value=“OracleDAL”/></appSettings>中节点的值E-
mail:luopf_xaut@163.com802022/11/25四、TqmNET框架应用实例4.2TQM系统的数据访问层的实现DALFactory程序集的实现:DataAccess.cs文件的实现以SYSINIT_USERINFO对应的方法Cr
eateSYSINIT_USERINFO()为例,其示例代码如下:if(objType==null){try{//此处采用反射机制,来获取这个类型objType=Assembly.Load(AssmeblyName).CreateInstance(Ca
cheKey);DataCache.SetCache(CacheKey,objType);//写入缓存}catch(System.Exceptionex){thrownewException(ex.Message);}}returnobjType;}通过给定程序集的格式名称加载程序集E-mail
:luopf_xaut@163.com812022/11/25四、TqmNET框架应用实例4.2TQM系统的数据访问层的实现DALFactory程序集的实现:DataAccess.cs文件的实现以SYSINIT_USERINFO对应的方法CreateSYSINIT_USERINFO()为例,其
示例代码如下:///<summary>///创建SYSDB.ISYSINIT_USERINFO数据层接口///</summary>publicstaticIDAL.SYSDB.ISYSINIT_USERINFOCreateSYSINIT_USERINFO(){stringCacheKe
y=AssmeblyName+".SYSDB.SYSINIT_USERINFO";objectobjType=CreateObject(AssmeblyName,CacheKey);return(IDAL.SYSDB.ISYSINIT
_USERINFO)objType;}}}软件框架的设计与实现4.1TQM系统概述4.2TQM系统的数据访问层实现4.3TQM系统的业务逻辑层实现4.4TQM系统的表示层实现四、TqmNET框架应用实例E-mail:luopf_xaut@163.com832022/11/2
5四、TqmNET框架应用实例4.3TQM系统的业务逻辑层的实现业务逻辑层与数据访问层之间的通讯:利用数据访问层访问数据库;在数据访问层引入IDAL程序集以及数据工厂的设计前提下,能够做到使两者间关系变为弱依赖;在业务逻辑层中,有关数据访问层中数据对象的调用,均定义了接
口类型对象,然后利用数据工厂中的方法来创建具体的数据对象。E-mail:luopf_xaut@163.com842022/11/25四、TqmNET框架应用实例4.3TQM系统的业务逻辑层的实现业务逻辑层与数据访问层之间的通讯
:以表SYSINIT_USERINFO为例,代码如下:namespaceBLL.SYSDB{publicclassSYSINIT_USERINFO{//创建ISYSINIT_USERINFO接口类型实例
privatereadonlyIDAL.SYSDB.ISYSINIT_USERINFOdal=DataAccess.CreateSYSINIT_USERINFO();//调用ISYSINIT_USERINFO对象的接口方法Exists()publicboolExists(stringUSE
RACCOUNTS){returndal.Exists(USERACCOUNTS);}…………}}可以解除对具体程序集OracleDAL的依赖不用考虑其模块的具体实现SYSINIT_USERINFO类实际上还完成了对数据对象SYSINI
T_USERINFO的封装。正是通过封装,使得表示层可以完全脱离数据库以及数据访问层,表示层的调用者仅需要关注业务逻辑层的实现逻辑及其暴露的方法和调用方式即可。E-mail:luopf_xaut@163.com852022/1
1/25四、TqmNET框架应用实例4.3TQM系统的业务逻辑层的实现TableModule模式下业务逻辑层的实现:对应每张数据表都有一个类。将每一张数据表看作一个业务对象,把对这张表的Insert、Update、Del
ete、Selecte的几种基本操作看作是业务逻辑。还包含了其他一些有特殊目的的业务逻辑,将这些业务逻辑设计成相关方法。E-mail:luopf_xaut@163.com862022/11/25四、TqmNET框架应用实例4.3TQM系统的业务逻辑层的
实现TableModule模式下业务逻辑层的实现:以表SYSINIT_USERINFO为例说明实现过程:类SYSINIT_USERINFO是SYSDB数据库中SYSINIT_USERINFO表的业务逻辑层定义;包含了
对数据库SYSDB中表SYSINIT_USERINFO的几种基本的操作。在表示层调用这些方法就可以完成一些数据操作。E-mail:luopf_xaut@163.com872022/11/25四、TqmNET框架应用实例4.3TQM系
统的业务逻辑层的实现TableModule模式下业务逻辑层的实现:以表SYSINIT_USERINFO为例说明实现过程,代码如下:namespaceBLL.SYSDB{publicclassSYSINIT_USERINFO{privatereadonlyIDAL.SYSDB
.ISYSINIT_USERINFOdal=DataAccess.CreateSYSINIT_USERINFO();publicSYSINIT_USERINFO(){}///<summary>///获得数据列
表///</summary>///<paramname=“strWhere”>需要的条件</param>publicDataSetGetList(stringstrWhere){returndal.GetList(strWhere
);}…………………………}}软件框架的设计与实现4.1TQM系统概述4.2TQM系统的数据访问层实现4.3TQM系统的业务逻辑层实现4.4TQM系统的表示层实现四、TqmNET框架应用实例E-mail:luopf_xaut@163.com892022/1
1/25四、TqmNET框架应用实例4.4TQM系统的表示层的实现TQM系统表示层中MVC模式的实现:TQM系统表示层中MVC模式应用如图:XX.aspx(View的结构部分)XX.css(View的样式部分)XX.aspx.cs(Controller)ModelTQM系统表示层中
MVC模式的应用View的实现主要包括aspx文件、css文件和图片。这里有两个设计要点。第一是“代码分离”,即aspx中不包含任何逻辑性代码,而仅作为页面的结构;第二是表现与结构的分离,aspx不仅不包含逻辑性代码
,也不包括任何样式,所有的呈现样式都定义在css样式表文件中,即做到表现与结构的分离。Controller就是页面的代码隐藏文件,即文件名为XX.aspx.cs的文件,其中包含了控件事件的相应代码、页面初始化及跳转逻辑等页面表示逻辑。Model
在这里可以看做业务逻辑层和数据访问层的全部。Model负责了UI和页面表示逻辑之外的所有职责。E-mail:luopf_xaut@163.com902022/11/25四、TqmNET框架应用实例4.
4TQM系统的表示层的实现TQM系统表示层中UI的实现:页面布局文件的实现主要是依靠拖拽ASP.NET控件到aspx文件中来实现的。ASP.NET控件充分利用了面向对象的设计思想,通过封装与继承构建一个
个控件对象,使得用户在开发Web页面时,能够复用这些控件。可以自定义一些用户控件:在VisualStudio的Design环境下,我们可以通过拖动控件的方式将多种类型的控件组合成一个自定义用户控件,也可以在codebehind方式下,为自定义用户控件类添加
新的属性和方法。E-mail:luopf_xaut@163.com912022/11/25四、TqmNET框架应用实例4.4TQM系统的表示层的实现TQM系统表示层中UI的实现:页面布局文件的实现,以登录界面为例:WebControlUserControlTQM系统登录界面E
-mail:luopf_xaut@163.com922022/11/25四、TqmNET框架应用实例4.4TQM系统的表示层的实现TQM系统表示层中UI的实现:页面样式文件的实现主要是依靠在css文件中编写CSS代码
来实现的。CSS叫做样式表(Stylesheet),也称之为层叠样式表(CascadingStylesheet)。在页面制作时采用CSS技术,可以有效地对页面的布局、字体、颜色、背景和其它效果实现更加精确的
控制。只要对相应的代码做一些简单的修改,就可以改变同一页面的不同部分,或者不同页面的外观和格式。CSS代码可以放在aspx页面里面,也可以放在单独的css文件中。在这里,推荐后者。TQM系统中所有的CSS代码都是放在单独的css文件中的,这样可以使代码结构更清晰。E
-mail:luopf_xaut@163.com932022/11/25四、TqmNET框架应用实例4.4TQM系统的表示层的实现TQM系统表示层中UI的实现:页面样式文件的实现,示例代码如下:.GridViewHeaderSty
le{background-color:#006699;/*GridView表头的背景色*/font-size:9pt;/*GridView表头中字体的大小*/color:White;/*GridView表头中字体的颜色*/}页面中对CSS文件的引用:先加入:
<headrunat="server"><linkrel="stylesheet"type="text/css"href="../css/GridView.css"/></head>再加入:<asp:GridViewID="GridView1"
runat="server"><HeaderStyleCssClass="GridViewHeaderStyle"/></asp:GridView>E-mail:luopf_xaut@163.com9
42022/11/25四、TqmNET框架应用实例4.4TQM系统的表示层的实现TQM系统表示层中页面表示逻辑的实现:在页面代码文件(.aspx.cs)中实现;通过JavaScript来实现。E-mail:luopf_xaut@163.com952022/11/25四、TqmNET框架应
用实例4.4TQM系统的表示层的实现TQM系统表示层中页面表示逻辑的实现:通过ASP.NET控件自身提供的事件来实现的。以登录界面的表示逻辑为例:根据用户输入的用户名和密码,检查该用户名和密码是否存在,如果不存在,则给出提
示信息。如果存在,则检查是否是该用户名是否有效,如果有效,则将进入主页面,如果无效,则给出提示信息。检查用户名和密码是否存在的业务已经在业务逻辑层实现了,表示层可以直接调用。而有效性的操作检查、错误信息的提示及页面跳转都放在表示层里。这一套逻辑,都放在“btnLogi
n“这个ImageButton控件的Click事件中。页面代码文件的实现:E-mail:luopf_xaut@163.com962022/11/25四、TqmNET框架应用实例4.4TQM系统的表示层的实现TQM系统表示层中页面表示逻辑的实现:页面代码文件的实现,代码示例:prot
ectedvoidbtnLogin_Click(objectsender,ImageClickEventArgse){stringuseraccounts=CheckString.CheckString.ClearSpace(txtUsername.Value
);stringPassword=CheckString.CheckString.ClearSpace(txtPass.Value);BLL.SYSDB.USERLOGINlogin=newUSERLOGIN();Model.SYS
DB.SYSINIT_USERINFOuser=newModel.SYSDB.SYSINIT_USERINFO();user=login.exists(useraccounts,Password);//调
用业务层的业务逻辑if(user==null)lblMsg.Text="用户名或密码有误";//控制页面上的其它控件的显示else{if(user.ISEFFECT=='0')//检查用户名的有效性lblMsg.Text=“该用户已被禁用";els
e{Response.Redirect("Default.aspx");//控制页面的跳转}}}E-mail:luopf_xaut@163.com972022/11/25四、TqmNET框架应用实例4.4TQM系统的表示层的实现TQM系统表示层中页面表示逻辑的实现:页
面表示逻辑中JavaScript的运用JavaScript通过嵌入或调入到标准的HTML语言中实现的。JavaScript主要是基于客户端运行的,用户点击带有JavaScript的页面,页面里的JavaScript就传到浏览器,由浏览器对此作处理,不需要和Web服务器
发生任何数据交换。因此,不会增加Web服务器的负担。JavaScript代码可以放在aspx页面里面,也可以放在单独的js文件中。在这里,推荐后者。TQM系统中所有的JavaScript都是放在单独的js文件中的,这样可以使代码结构更清晰,
也有利于复用。值得注意的是,JavaScript中定义的方法基本上需用HTML控件来调用,而不是由Web控件来调用。E-mail:luopf_xaut@163.com982022/11/25四、TqmNET框架应用实例4.4TQM系
统的表示层的实现TQM系统表示层中页面表示逻辑的实现:页面表示逻辑中JavaScript的运用,示例代码:functionMultiple(){vartotalNum1=document.getElementById("Selec
tnum");//选择项的总和vartotalNumEnd=document.getElementById("Approve");//乘系数的值varmodulus=document.getElementById("Modu
lus");//系数if(totalNum1.value!=0&modulus.value!=0){totalNumEnd.value=parseFloat(totalNum1.value)*parseFloat(modulus.value);}elset
otalNumEnd.value=0;}JavaScript的调用先加入:<headrunat="server"><scripttype="text/javascript"src="../jscript/CModify.js"></script></head>E-mail:luop
f_xaut@163.com992022/11/25四、TqmNET框架应用实例4.4TQM系统的表示层的实现TQM系统表示层中页面表示逻辑的实现:页面表示逻辑中JavaScript的运用,示例代码:functionMultiple(){vartotalNum1=d
ocument.getElementById("Selectnum");//选择项的总和vartotalNumEnd=document.getElementById("Approve");//乘系数的值varmodulus=docume
nt.getElementById("Modulus");//系数if(totalNum1.value!=0&modulus.value!=0){totalNumEnd.value=parseFloat(totalNum1.value)*pars
eFloat(modulus.value);}elsetotalNumEnd.value=0;}JavaScript的调用再加入:<inputid="Modulus"runat="server"type="text"value="1"onkeyup="Multiple()"/>E-m
ail:luopf_xaut@163.com1002022/11/25学习资源推荐:(1)http://www.cnblogs.com博客园(2)http://www.csdn.netCSDNE-mail:luopf_xaut@163.com1012022/11/25END!