4.1.2 基于组件的开发模式
组件是对数据和方法的简单封装, 组件技术是应用级别的集成技术。基于组件的开发模式是在一定的软件模型的支持下, 将应用系统分解成为一个个独立的单元, 然后在组件库中查询应重用各类合适的组件, 最后组装相关的组件来构造应用系统软件的过程。基于组件的开发模式, 主要利用了系统软件的可重用性思想, 伴随着组件技术和电子商务的快速发展, 基于组件的开发模式已经成为电子商务系统开发的主流模式, 其中比较具有代表性的包括CORBA、DCOM、.NET Framework、J2EE 和Struts。
1.CORBA
CORBA (Common Object Request Broker Architecture, 公共对象请求代理体系结构) 是由OMG (对象管理组织) 制定的一种标准的面向对象的应用程序体系规范, 是OMG 为解决分布式处理环境中硬件和软件系统的互联而提出的一种解决方案。CORBA 提出了一种在异构分布式环境下客户端与服务器进行通信的方式, 它可以让分布的应用程序完成通信, 无论这种应用程序是什么厂商生产的, 只要符合CORBA 标准就可以相互通信。CORBA 的主要内容包括以下4个部分。
①对象请求代理(Object Request Broker, ORB): CORBA 的核心部分, 定义了对象间的一种通信机制, 对象通过这种机制可以透明地发出请求和接收响应, 分布的、可互操作的对象能够利用ORB 构造可操作的应用。
②对象服务(Object Service): 为使用和实现对象而提供的基本服务集合, 主要包括名录服务、事件服务、生命周期服务、关系服务、事物服务等, 这些服务独立于应用领域。
③公共设施(Common Facilities): 向终端用户应用程序提供的一组共享服务结构, 如系统管理、组合文档和电子邮件等。
④域接口(Domain Interfaces): 为应用领域服务而提供的接口。
CORBA 定义了接口定义语言(Interface Definition Language, IDL) 和应用程序编程接口(Application Programming Interface, API), 并通过ORB 来激活客户/服务器(Client/Server, 即C/S) 的交互。ORB 是一个中间件, 在对象间建立C/S 的关系, 如图4-3所示, 其中ORB 接口是灰色的矩形, 直线箭头说明ORB 的调用关系, 弧形箭头表示客户端发出的请求。客户端通过动态调用接口(Dynamic Invocation Interface, DII) 或一个IDL 占位程序(IDL Stubs) 发送请求, 服务器通过动态框架接口(Dynamic Skeleton Interface,DSI) 来接受请求。ORB 的任务是定位一个合适的服务器, 并且通过一个对象适配器(Object Adapter, OA) 将请求传送给服务器。OA 的目的是给框架发送请求并支持服务器对象的生命周期, 如对象的建立和删除。客户和服务器之间的静态接口通过IDL 来定义,一个IDL 规范可用于产生到ORB 的、类型安全的、应用特定的结构, 客户端与ORB 之间的静态接口为静态调用接口(Static Invocation Interface, SII), 服务器端与ORB 之间的接口称为静态框架接口(Static Skeleton Interface, SSI)。
在传统的C/S 程序中, 开发者使用他们自己设计的或者公认的标准定义设备之间的协议, 协议的定义依赖于实现的语言、网络的传输和其他许多因素。ORB 将这个过程简单化, ORB 中的协议定义是通过应用接口, 而该接口是IDL 的一个实现, 它和使用的编程语言无关, 并且ORB 提供了很大的灵活性, 它让程序员选择最适当的操作系统、运行环境和设计语言来建设系统中的每个组件, 更重要的是, 它还允许集成已存在的组件。CORBA是在面向对象标准化和互操作性道路上的一个信号, 通过CORBA, 用户可以在不知道软硬件平台及网络位置的情况下进行操作并获取信息。CORBA 具有以下特点和优势。
①CORBA 定义了一种面向对象的软件构件构造方法, 使不同的应用可以共享由此构造出来的软件构件。
②每个对象都将其内部操作细节封装起来, 同时又向外界提供了精确定义的接口, 从而降低了应用系统的复杂性, 也降低了软件的开发费用。
③CORBA 的平台无关性实现了对象的跨平台引用, 开发人员可以在更大的范围内选择最实用的对象加入自己的应用系统之中。
④CORBA 的语言无关性使开发人员可以在更大范围内利用别人的编程技能和成果,是实现软件利用的实用化工具。
图4-3 ORB 的结构
2.DCOM
DCOM (Distributed Component Object Model, 分布式组件对象模型) 是COM (Component Object Model, 组件对象模型) 的扩展, 它支持不同的两台机器上的组件间的通信,而且不论它们是运行在局域网、广域网还是Internet 上, 应用程序借助DCOM 能够任意进行空间分布, 从而满足客户和应用的需求。
由于DCOM 是组件技术COM 的无缝升级, 因此可以将现有关于COM 的应用、组件、工具以及知识转移到标准化的分布式计算领域中来。在做分布式计算时, DCOM 可以处理网络协议的低层次的细节问题, 从而能够集中精力解决客户所要求的问题。例如, 当为一个网站创建应用页面时, 若其中包括了一段能够在网络中另一台更加专业的服务器电脑上处理的脚本或程序, 则使用DCOM 接口, 网络服务器站点程序(现在以客户端对象方式发出动作) 就能够将一个远程程序调用(Remote Procedure Call, RPC) 发送到一个专门的服务器对象上, 它可以通过必要的处理, 并给站点返回一个结果, 结果将发送到网页浏览器上。
大多数分布式应用都不是凭空产生的, 现在的硬件结构、软件、组件以及工具需要集成起来, 以便减少开发和扩展时间以及费用。DCOM 能够直接且透明地改进现存的对COM组件和工具的投资。对各种各样组件需求的巨大市场使开发者将标准化的解决方案集成到一个普通应用系统中成为可能。许多熟悉COM 的开发者能够很轻易地将他们在COM 方面的经验运用到基于DCOM 的分布式应用中去。
任何为分布式应用开发的组件都有可能在将来被复用。围绕组件模式来组织开发过程使开发者能够在原有工作的基础上不断提高新系统的功能并减少开发时间。基于COM 和DCOM 的设计能使开发者的组件在现在和将来都能得到很好的使用。
3..NET Framework
.NET Framework (又称.NET 框架), 它是由微软开发的一个致力于敏捷软件开发、快速应用开发、平台无关性和网络透明化的软件开发平台。.NET 框架是以一种采用系统虚拟机运行的编程平台, 以通用语言运行库为基础, 支持多种语言(C#、Visual Basic、C++、Python 等) 的开发。.NET 使程序设计者可以同时进行Windows 应用软件、网络应用软件、Web 服务、Windows Phone 开发。
.NET 框架是一个多语言组件开发和执行环境, 它提供了一个跨语言的统一编程环境,其目的是便于开发人员更容易地建立Web 应用程序和Web 服务, 使Internet 上的各应用程序之间可以使用Web 服务进行沟通。从层次结构来看, .NET 框架包括6个组成部分, 如图4-4所示。
图4-4 .NET 框架的层次结构
①公共语言运行时(Common Language Runtime, CLR): 一个运行时环境, 管理代码的执行并使开发过程变得更加简单。CLR 是一种受控的执行环境, 其功能通过编译器与其他工具共同展现。
②基类库(Base Class Library, BCL): 在CLR 之上, 提供了一套开发人员希望在标准语言库中存在的基类库, 包括集合、输入/输出、字符串及数据类。
③ADO.NET: 为.NET 框架提供统一的数据访问技术, 与以前的数据访问技术相比,ADO.NET 主要增加了对XML 的充分支持、新数据对象的引入、语言无关的对象的引入以及使用和CLR 一致的类型等。
④应用程序模板: .NET 框架的主要界面技术, 包括系统的Windows 应用程序模板和基于ASP.NET 的面向Web 的网络应用程序模板。
⑤公共语言规范(Common Language Specification, CLS): 定义了一组运行于.NET 框架的语言特性, 是一种语言规范。由于.NET 框架支持多种语言, 并且要在不同语言对象之间进行交互, 因此就要求这些语言必须遵守一些共同的规则, 而CLS 定义了这些语言的共同规则, 包括数据类型、语言构造等。
⑥程序设计语言: 凡是复合CLS 的语言都可以在.NET 框架上运行, 目前包括C#、Visual Basic、C++、JavaScript 等。由于多种语言都运行在.NET 框架之中, 因此它们的功能基本相同, 只是语法有所区别。各种语言经过编译后, 先转化为一种中间语言, 执行时再由公共语言运行库载入内存, 通过实时解释将其转换为CPU 可执行代码。
4.J2EE
J2EE (Java 2 Platform Enterprise Edition) 是一种利用Java 2平台来简化企业解决方案的开发、部署和管理相关复杂问题的体系结构。J2EE 技术的基础就是核心Java 平台或Java 2平台的标准版, 它不仅巩固了标准版中的许多优点, 同时还提供了对EJB (Enterprise Java Bean)、Java Servlet API、JSP 以及XML 技术的全面支持, 其最终目的是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。
J2EE 架构使用多层的分布应用模型, 将传统的C/S 两层化模型中的不同层面划分成许多层, 应用逻辑按功能划分为组件, 各个应用组件根据它们所在的层分布在不同的机器上, 以下是J2EE 典型的4层结构。
①客户层组件: 运行在客户端机器上, 主要用来与客户交互, 并把来自系统的信息显示给客户。
②Web 层组件: 运行在J2EE 服务器上, 可以是JSP 页面或Servlet。Web 层可能包含某些Java Bean 对象来处理客户输入, 并把输入发送给运行在业务层上的Enterprise Bean 来进行处理。
③业务逻辑层组件: 运行在J2EE 服务器上, 用来满足银行、零售等特殊商务领域的需要, 由运行在业务层上的Enterprise Bean 进行处理。如图4-5所示, Enterprise Bean 从客户端程序接收数据, 必要时进行处理, 然后发送到EIS 层存储。
图4-5 业务逻辑层组件
④企业信息系统层组件: 运行在数据库服务器上, 用于处理企业信息系统(Enterprise Information System, EIS) 软件, 包括企业资源计划、大型事务处理、数据库系统和其他信息系统, 如J2EE 应用组件可能为了数据库连接需要访问企业信息系统。
J2EE 平台已经成为使用最广泛的Web 程序设计技术, 主要支持两类软件的开发和应用, 一类是做高级信息系统框架的Web 应用服务器, 另一类是在Web 应用服务器上运行的Web 应用程序。J2EE 实际上为Web 应用系统提供了容器平台, 用户所开发的程序组件可以在容器内运行, J2EE 为搭建具有可伸缩性、灵活性、易维护性的电子商务系统提供了良好的机制。
5.Struts
Struts 是Apache 软件基金会(ASF) 赞助的一个开源项目, 最初是Jakarta 项目中的一个子项目, 并在2004年3月成为ASF 的顶级项目。Struts 是一种面向对象的设计, 通过采用Java Servlet 和JSP 技术, 实现了基于Java 的Web 应用的MVC (Model-View-Controller,模型-视图-控制器) 架构, 并将MVC 模式“分离显示逻辑和业务逻辑” 的能力发挥得淋漓尽致, 是MVC 设计模式中的一个经典产品。Struts 对控制器、模型和视图都提供了相应的实现组件。
(1) Struts 控制器组件
控制器的作用是从客户端接受请求, 并且选择执行相应的业务逻辑, 然后把响应结果送回到客户端。在Struts 中, 控制器由ActionServlet 和ActionMapping 对象构成, 其中ActionServlet 负责接收客户端的请求, 它创建并使用封装了具体处理逻辑的Action 类、封装了用户表单所提交数据的ActionForm 类和定义控制将被转发方向的ActionForward 类来实现控制器的功能, 而struts-config.xml 文件被用于配置ActionServlet。ActionMapping 用于帮助ActionServlet 将请求映射到具体的操作处理对象。
(2) Struts 模型组件
Struts 模型组件代表Web 应用的业务数据和逻辑, 包含了业务实体和业务规划, 负责访问和更新持久化的数据。Struts 的模型组件主要由ActionForm Bean、系统状态Bean 以及业务逻辑Bean 组成。
(3) Struts 视图组件
Struts 应用中的视图部分是通过JSP 技术实现的。Struts 使用自定义来标记创建JSP 表单, 可以实现和ActionForm 的映射, 完成对用户数据的封装, 同时这些自定义标记还提供了模板定制等多种显示功能。
Struts 框架的处理流程清楚地体现了MVC 系统的特点, 图4-6显示了简单的Struts 组件结构及组件间的相互关系。Struts 控制器ActionServlet 接收并处理客户端请求, 通过配置文件struts-config.xml 里的ActionMapping 对象找到负责处理请求的Action 对象和封装了客户数据的ActionForm; Action 对象访问ActionForm 中的数据并调用分专业具体业务逻辑的Java Bean 模型组件来处理请求; Action 对象根据处理结果通知ActionServlet, 然后由ActionServlet 决定下一步需要进行的处理。
Struts 框架具有以下一些优点。
①实现了MVC 模式, 结构清晰, 使开发者可以只关注业务逻辑的实现。
②有丰富的tag (标签) 可用, 灵活运用Struts 标记库(Taglib) 能大大提高开发效率。
③通过配置文件可把握整个系统各部分之间的联系, 方便后期的系统维护。
④提供了一个灵活的体制来处理错误和异常。
Struts 是一种优秀的MVC 架构方式, 有效体现了MVC 设计模式的特点, 使用Struts 还可以帮助开发人员减少在运用MVC 设计模式来开发Web 应用的时间, 如果想混合使用Servlet 和JSP 的优点来扩建可扩展的应用, 那么Struts 是一个不错的选择。
图4-6 Struts 组件结构及组件间的相互关系