数自动生成所需的代码: (2)继承和多态:通过面向对象中的子类继承和重载,在子类中加入新的功能 或改变父类的行为: (3)动态绑定:在运行时刻动态绑定所需的对象服务,这可以通过一些软件设 计模式实现: (4)构件替换:通过替换框架中可插拔的构件来加入业务特定的功能。 使用软件框架进行开发,开发者只需要关注那些需要自己实现的部分,软件 框架将会主动调用用户开发的软件组件,从而实现软件的功能。 软件框架有很多种,按其应用的范围可分为: (1)系统基础设施框架:用于简化系统级软件的开发,如操作系统、用户界面、 语言处理等。开发框架的例子如struts1,struts2,hibernate,spring,ibatis, Lucene等。 (2)企业应用框架:用于各类应用领域,如电信、制造业、金融等。如Apache OFBz就是一个较全面的企业软件框架。 6.3.3中间件 中间件(middleware)也是可重用软件。中间间位于操作系统、网络和数据库 之上,应用软件的下层,作用是为处于上层的应用软件提供运行与开发的环境, 帮助用户灵活、高效地开发和集成复杂的应用软件。 中间件一般是分布式的软件,在网络通信功能的基础上,提供了应用之间的 互操作能力。中间件向应用提供的服务一般具有标准的程序接口和协议,同时应 该具备跨平台的能力,就是说针对不同的操作系统和硬件平台,需要有符合接口 和协议规范的多种实现。 目前中间件可以分为以下类型: 1)数据库中间件 数据库中间件在所有的中间件中是应用最广泛,技术最成熟的一种。ODBC 就是一种典型的、相对简单而又广泛使用的数据库中间件,它允许应用程序和本 地或者异地的数据库进行通信,并提供了一系列的面向应用程序的接口API。在 使用时,只要在ODBC中添加一个数据源,然后就可以直接在自己的应用程序中 使用这个数据源,而不用关心目标数据库的实现原理、实现机制。 2)远程过程调用中间件(RPC,Remote Procedure Call) 远程过程调用被广泛应用于客户/服务器架构中,使得程序员就像调用本地
数自动生成所需的代码; (2)继承和多态:通过面向对象中的子类继承和重载,在子类中加入新的功能 或改变父类的行为; (3)动态绑定:在运行时刻动态绑定所需的对象服务,这可以通过一些软件设 计模式实现; (4)构件替换:通过替换框架中可插拔的构件来加入业务特定的功能 。 使用软件框架进行开发,开发者只需要关注那些需要自己实现的部分,软件 框架将会主动调用用户开发的软件组件,从而实现软件的功能。 软件框架有很多种,按其应用的范围可分为: (1)系统基础设施框架:用于简化系统级软件的开发,如操作系统、用户界面、 语言处理等。开发框架的例子如 struts1,struts2,hibernate,spring,ibatis, Lucene 等。 (2)企业应用框架:用于各类应用领域,如电信、制造业、金融等。如 Apache OFBiz 就是一个较全面的企业软件框架。 6.3.3 中间件 中间件(middleware)也是可重用软件。中间间位于操作系统、网络和数据库 之上,应用软件的下层,作用是为处于上层的应用软件提供运行与开发的环境, 帮助用户灵活、高效地开发和集成复杂的应用软件。 中间件一般是分布式的软件,在网络通信功能的基础上,提供了应用之间的 互操作能力。中间件向应用提供的服务一般具有标准的程序接口和协议,同时应 该具备跨平台的能力,就是说针对不同的操作系统和硬件平台,需要有符合接口 和协议规范的多种实现。 目前中间件可以分为以下类型: 1)数据库中间件 数据库中间件在所有的中间件中是应用最广泛,技术最成熟的一种。ODBC 就是一种典型的、相对简单而又广泛使用的数据库中间件,它允许应用程序和本 地或者异地的数据库进行通信,并提供了一系列的面向应用程序的接口 API。在 使用时,只要在 ODBC 中添加一个数据源,然后就可以直接在自己的应用程序中 使用这个数据源,而不用关心目标数据库的实现原理、实现机制。 2)远程过程调用中间件(RPC, Remote Procedure Call) 远程过程调用被广泛应用于客户/服务器架构中,使得程序员就像调用本地
过程一样在程序中调用远程过程,然后将运行结果返回给本地程序。远程过程调 用具有跨平台性,也就是说它的调用可以跨不同操作系统平台,程序员在编程时 并不需要考虑这些细节。远程过程调用采用的是同步通信方式,对于比较小型的 简单应用比较适合。但是对于一些大型的应用,这种方式不一定适合,同时在一 些复杂应用中,需要考虑网络或者系统故障,处理并发操作、缓冲、流量控制以 及进程同步等问题,这些是远程过程调用中间件所无法满足的。 3)基于对象请求代理(ORB,Object Request Broker)的中间件 对象请求代理是是和编程语言无关的面向对象的RPC应用。从管理和封装 的模式上看,对象请求代理和远过程调用类似,不过对象请求代理可以包含比远 过程调用和消息中间件更复杂的信息,并且可以适用于非结构化的或者非关系型 的数据。 4)面向消息中间件(MOM,Message Oriented Middleware) 消息中间件适用于需要在多个进程之间进行可靠的数据传送的分布式环境。 它的优点在于能够在客户和服务器之间提供同步和异步的连接,并且在任何时刻 都可以将消息进行传送或者存储转发。消息中间件不会占用大量的网络带宽,可 以跟踪事务,并且通过将事务存储到磁盘上实现网络故障时系统的恢复。 5)事务处理中间件(TPM,Transaction Processing Monitor) 事务处理中间件是针对复杂环境下分布式应用的速度和可靠性要求而实现 的。它给程序员提供了一个事务处理的API,程序员可以使用这个程序接口编写 高速而且可靠的分布式应用程序。事务处理中间件常见的功能包括全局事务协调、 事务的分布式两段提交、资源管理器支持、故障恢复、高可靠性、网络负载平衡 等等。 6)服务中间件 随着Web服务技术的应用和普及,出现了针对Web服务的中间件软件,其 中最具有代表性的是服务总线,它是传统中间件技术与XML、Wb服务等技术 结合的产物。它消除了不同应用之间的技术差异,实现了不同服务之间的通信和 整合。从功能上看,服务总线提供了事件驱动的处理模式,以及分布式的运行管 理机制,它支持基于内容的路由和过滤,具备了复杂数据的传输能力,并可以提 供一系列的标准接口
过程一样在程序中调用远程过程,然后将运行结果返回给本地程序。远程过程调 用具有跨平台性,也就是说它的调用可以跨不同操作系统平台,程序员在编程时 并不需要考虑这些细节。远程过程调用采用的是同步通信方式,对于比较小型的 简单应用比较适合。但是对于一些大型的应用,这种方式不一定适合,同时在一 些复杂应用中,需要考虑网络或者系统故障,处理并发操作、缓冲、流量控制以 及进程同步等问题,这些是远程过程调用中间件所无法满足的。 3)基于对象请求代理(ORB,Object Request Broker)的中间件 对象请求代理是是和编程语言无关的面向对象的 RPC 应用。从管理和封装 的模式上看,对象请求代理和远过程调用类似,不过对象请求代理可以包含比远 过程调用和消息中间件更复杂的信息,并且可以适用于非结构化的或者非关系型 的数据。 4)面向消息中间件(MOM,Message Oriented Middleware) 消息中间件适用于需要在多个进程之间进行可靠的数据传送的分布式环境。 它的优点在于能够在客户和服务器之间提供同步和异步的连接,并且在任何时刻 都可以将消息进行传送或者存储转发。消息中间件不会占用大量的网络带宽,可 以跟踪事务,并且通过将事务存储到磁盘上实现网络故障时系统的恢复。。 5)事务处理中间件(TPM,Transaction Processing Monitor) 事务处理中间件是针对复杂环境下分布式应用的速度和可靠性要求而实现 的。它给程序员提供了一个事务处理的 API,程序员可以使用这个程序接口编写 高速而且可靠的分布式应用程序。事务处理中间件常见的功能包括全局事务协调、 事务的分布式两段提交、资源管理器支持、故障恢复、高可靠性、网络负载平衡 等等。 6) 服务中间件 随着 Web 服务技术的应用和普及,出现了针对 Web 服务的中间件软件,其 中最具有代表性的是服务总线,它是传统中间件技术与 XML、Web 服务等技术 结合的产物。它消除了不同应用之间的技术差异,实现了不同服务之间的通信和 整合。从功能上看,服务总线提供了事件驱动的处理模式,以及分布式的运行管 理机制,它支持基于内容的路由和过滤,具备了复杂数据的传输能力,并可以提 供一系列的标准接口
6.3.4设计模式 针对特定的设计问题,大家总结了一些成功的设计方法,为大家所共享,这 就是设计模式。设计模式是一个问题和方案对,即针对什么问题,提供什么方案, 这个方案有何优缺点都加以明确化。 设计模式有许多。我们可以把它归为三类,即结构模式、行为模型和创建模 式。结构模式用来降低类之间的耦合性,通常采用引入抽象类或者接口以实现未 来的可扩展性:行为模式将算法或者功能实现进行合理分配,使得整体控制流程 中的某一个步骤的功能实现能够动态替换或者改变:创建模式将复杂的对象生成 过程进行了抽象,使得那些需要依据外界的配置条件决定生成一组对象的操作对 软件其他部分透明。 图6-1列出了按照此三种分类的常见的设计模式。 Pattern Creational Structural Pattern Pattern Behavioral Pattern Abstract Builder Factory Pattern Command Observer Strategy Adapter Bridge Facade Proxy Composite 图6-1设计模式的分类 6.4系统设计 系统设计是围绕设计目标确定合理的系统构成和总体工作机制的过程。在总 体设计中,也需要考虑系统实现的成本、时间、风险和质量因素。以下为典型的 系统设计过程: 1.确定设计目标:根据用户的需求或者市场的需求确定设计目标,这些设计目 标通常是依据非功能需求而定的
6.3.4 设计模式 针对特定的设计问题,大家总结了一些成功的设计方法,为大家所共享,这 就是设计模式。设计模式是一个问题和方案对,即针对什么问题,提供什么方案, 这个方案有何优缺点都加以明确化。 设计模式有许多。我们可以把它归为三类,即结构模式、行为模型和创建模 式。结构模式用来降低类之间的耦合性,通常采用引入抽象类或者接口以实现未 来的可扩展性;行为模式将算法或者功能实现进行合理分配,使得整体控制流程 中的某一个步骤的功能实现能够动态替换或者改变;创建模式将复杂的对象生成 过程进行了抽象,使得那些需要依据外界的配置条件决定生成一组对象的操作对 软件其他部分透明。 图 6-1 列出了按照此三种分类的常见的设计模式。 图 6-1 设计模式的分类 6.4 系统设计 系统设计是围绕设计目标确定合理的系统构成和总体工作机制的过程。在总 体设计中,也需要考虑系统实现的成本、时间、风险和质量因素。以下为典型的 系统设计过程: 1. 确定设计目标:根据用户的需求或者市场的需求确定设计目标,这些设计目 标通常是依据非功能需求而定的
2.确定子系统的分解结构:确定系统分为哪些子系统,各个子系统向外提供的 接口,各个子系统之间是如何实现交互的。 6.4.1系统设计中的概念 6.4.1.1系统分解的概念 系统分解中涉及到以下概念: (1)子系统:子系统包含了一组紧密相关的类产生的对象。子系统一般具有定 义良好的接口,因此具有整体的可替换性。 (2)服务:是由子系统提供的具有共同目标的一组相关的操作。 (3)子系统接口:经过完整定义的一组相关的接口。 系统分解就是定义具有良好接口的子系统的过程。 从大的角度看,系统分解有两种模式,即分层(Layer)和拆分(Partition)。 所谓“层”,也是一个子系统,该子系统向上层提供接口,同时利用下层系统 的接口。分层体系结构使得各层有清晰的责任,并保持了实现上的独立性。因而, 分层体系结构是目前的一种主流结构。典型的三层结构系统中各层为: ●用户界面层:提供与用户交互的接口。用户界面层采用与U设计相关的技 术进行构造。 ●应用逻辑和领域对象层:根据分析阶段得到的对象模型、动态模型而开发的 软件对象模型,它们之间的协作能够实现业务功能: 技术服务层:提供一些通用的对象或者子系统,负责与数据库、日志、网络 等打交道,一般是与应用没有直接关系。在这一部分,我们经常会使用一些 己有的类库、中间件甚至软件框架。 拆分是将系统从垂直的角度分成耦合度小的几个子系统,在多数情况下,拆 分是按照功能进行的。 6.4.1.2系统架构模式 系统架构模式是几种具有代表性的架构,在确定系统结构时,可以选用某种 具有代表性的系统架构模式,根据它们,确定具体的结构方式
2. 确定子系统的分解结构:确定系统分为哪些子系统,各个子系统向外提供的 接口,各个子系统之间是如何实现交互的。 6.4.1 系统设计中的概念 6.4.1.1 系统分解的概念 系统分解中涉及到以下概念: (1) 子系统:子系统包含了一组紧密相关的类产生的对象。子系统一般具有定 义良好的接口,因此具有整体的可替换性。 (2) 服务:是由子系统提供的具有共同目标的一组相关的操作。 (3) 子系统接口:经过完整定义的一组相关的接口。 系统分解就是定义具有良好接口的子系统的过程。 从大的角度看,系统分解有两种模式,即分层(Layer)和拆分(Partition)。 所谓“层”,也是一个子系统,该子系统向上层提供接口,同时利用下层系统 的接口。分层体系结构使得各层有清晰的责任,并保持了实现上的独立性。因而, 分层体系结构是目前的一种主流结构。典型的三层结构系统中各层为: 用户界面层:提供与用户交互的接口。用户界面层采用与 UI 设计相关的技 术进行构造。 应用逻辑和领域对象层:根据分析阶段得到的对象模型、动态模型而开发的 软件对象模型,它们之间的协作能够实现业务功能; 技术服务层:提供一些通用的对象或者子系统,负责与数据库、日志、网络 等打交道,一般是与应用没有直接关系。在这一部分,我们经常会使用一些 已有的类库、中间件甚至软件框架。 拆分是将系统从垂直的角度分成耦合度小的几个子系统,在多数情况下,拆 分是按照功能进行的。 6.4.1.2 系统架构模式 系统架构模式是几种具有代表性的架构,在确定系统结构时,可以选用某种 具有代表性的系统架构模式,根据它们,确定具体的结构方式
1.客户/服务器模式(Client/Server,C/S) 客户机/服务器结构是软件系统中最常见的一种。客户端向服务器方发送请求, 服务器方根据接收到的请求向客户返回结果。这种模式随着数据库服务器的成熟 而得到了流行,并且随着技术的发展,出现了许多不同的形态。 (1)两层C/S结构 该模式是最具代表性的客户/服务器模式,也简称为“胖客户端”模式。在 实际的系统设计中,该类结构主要是指前台客户端+后台数据库管理系统。 (2)三层C/S结构与B/S结构 在三层C/S结构中,其前台界面送往后台的请求中,先经过业务逻辑层处理, 再进行数据库存取操作,前台界面与业务逻辑层之间可以采用TCP/IP协议,自 定义的消息机制、基于RPC编程来实现、基于Java RMI,或者基于中间件如消 息中间件来实现通信。 当前台采用Web页面、页面与Web服务器采用HTTP协议通信时,这就是 流行的B/S(Brower/Server,浏览器/服务器)模式。 (3)多层C/S结构 多层C/S结构一般是指三层以上的结构,在实践中主要是三层与四层,四层 即前台界面(如浏览器)、Wb服务器、中间件(或应用服务器)及数据库服务 器,多层客户机/服务器模式主要用于较有规模的企业信息系统建设。 2.模型视图控制器模式(Model,,View and Controller,MVC) MVC既是一种架构模式也是一种设计模式,MVC可以带来更好的软件结构和 代码重用。 在MVC中,将软件中处理输入、输出和处理功能的部分分开,使用MVC的 软件被分成三个核心部件:模型、视图和控制器。 (1)视图 视图是用户看到并与之交互的界面。例如,在Wb程序中,视图就是浏览 器中用户看到的页面。随着技术的发展,各种新型的用户交互形式不断出现,例 如语音接口,三维接口等,如何处理应用程序的界面变得越来越有挑战性。在 MVC中,一个程序可以有多个视图,在视图中不包含处理逻辑。 (2)模型 模型表示企业数据和业务逻辑。在MVC的三个部件中,模型是最核心的部 分。在面向对象的软件模式中,模型部分与具体的数据格式(返回给前端的结果) 无关,这样一个模型能为多个视图提供数据
1. 客户/服务器模式(Client/Server,C/S) 客户机/服务器结构是软件系统中最常见的一种。客户端向服务器方发送请求, 服务器方根据接收到的请求向客户返回结果。这种模式随着数据库服务器的成熟 而得到了流行,并且随着技术的发展,出现了许多不同的形态。 (1)两层 C/S 结构 该模式是最具代表性的客户/服务器模式,也简称为 “胖客户端”模式。在 实际的系统设计中,该类结构主要是指前台客户端+后台数据库管理系统。 (2)三层 C/S 结构与 B/S 结构 在三层 C/S 结构中,其前台界面送往后台的请求中,先经过业务逻辑层处理, 再进行数据库存取操作,前台界面与业务逻辑层之间可以采用 TCP/IP 协议,自 定义的消息机制、基于 RPC 编程来实现、基于 Java RMI,或者基于中间件如消 息中间件来实现通信。 当前台采用 Web 页面、页面与 Web 服务器采用 HTTP 协议通信时,这就是 流行的 B/S(Brower/Server,浏览器/服务器)模式。 (3)多层 C/S 结构 多层 C/S 结构一般是指三层以上的结构,在实践中主要是三层与四层,四层 即前台界面(如浏览器)、Web 服务器、中间件(或应用服务器)及数据库服务 器, 多层客户机/服务器模式主要用于较有规模的企业信息系统建设。 2. 模型视图控制器模式(Model, View and Controller, MVC) MVC 既是一种架构模式也是一种设计模式,MVC 可以带来更好的软件结构和 代码重用。 在 MVC 中,将软件中处理输入、输出和处理功能的部分分开,使用 MVC 的 软件被分成三个核心部件:模型、视图和控制器。 (1)视图 视图是用户看到并与之交互的界面。例如,在 Web 程序中,视图就是浏览 器中用户看到的页面。随着技术的发展,各种新型的用户交互形式不断出现,例 如语音接口,三维接口等,如何处理应用程序的界面变得越来越有挑战性。在 MVC 中,一个程序可以有多个视图,在视图中不包含处理逻辑。 (2)模型 模型表示企业数据和业务逻辑。在 MVC 的三个部件中,模型是最核心的部 分。在面向对象的软件模式中,模型部分与具体的数据格式(返回给前端的结果) 无关,这样一个模型能为多个视图提供数据