王 雪,鹿 旸,张 辛
(中国地质大学(北京) 软件学院,北京 100083)
领域是指一组具有相似或相近软件需求的应用系统所覆盖的功能区域[1]。在传统的软件开发中,从对软件系统最初的概念到可操作实现的过程,有多个环节多种工作是重复劳动的。软件工程中软件复用的思想就是为了避免重复劳动的解决方案,其出发点就是应用系统的开发不再采用一切“从零开始”的模式,而是充分利用过去应用系统开发过程中积累的知识和经验,从而使软件工作者着重于新系统中的新问题和新需求。领域工程就是以软件复用为目的,解决可复用信息的识别、组织和利用问题。它是软件开发者用于为相应领域定义范围、指定结构和创建可复用资产的过程和实践,涵盖界定、分类及创建可复用构件的所有活动。
领域工程是基于可重用构件的,软件产品中的通用功能嵌入在各种软件构件之中,因此领域工程中一项很重要的工作就是生产和组织封装性良好的和易于重用的软件构件。基于构件的软件开发重在构件的集成而不是软件的编程。近年来,软件复用的研究结果表明基于体系结构、特定领域的重用能在软件的质量和产量上有较大的改进。软件的体系机构或者说架构是一组协同工作的类,它们为特定类型的软件构筑了一个可重用的设计。面向领域的软件产品族架构同过去的单一软件产品的体系架构不同之处就在于领域平台提供了公共资产,包含领域框架、领域建模工具、公共构件库等。
.NET Framework在底层的执行引擎源于托管的虚拟机概念,其通用语言运行时不仅支持内存回收机制和异常处理机制,并且实现了跨语言承诺和组件自描述等特性。其次,.NET Framework为面向对象程序设计提供了单根继承、多接口实现等直接的支持,提供了绘图、网络、线程、ADO.NET等一系列的API,可以说对现代组件编程从设计、编码、配置到运行都给予了很好的支持。作为新一代应用程序的开发平台,其平台构造对其代码的生产性与移植性是高效的[2]。
在软件的体系架构中,分层式结构是最为常见也最为重要的一种结构[3]。如图1所示是.NET中标准的B/S分层式结构。
基于.NET Framework的应用程序一般属于如上的三层式结构:数据访问层、业务逻辑层和表示层。数据访问层主要负责对数据库的操作;业务逻辑层是整个系统的核心,涉及到系统相关的业务;表示层主要负责使用者与系统的交互,侧重用户的体验。分层式结构降低了层与层之间的依赖,有利用各层模块的修改与复用,使开发人员可以只关注其整个结构中的某一层。概括来说,分层式设计可以达到如下目的:分散关注、松散耦合、逻辑复用和标准定义的目的,从而提高了开发效率。
一般而言,应用系统的架构包含两个因素:首先,它是一个应用系统从整体到部分的最高层次的划分,包括架构元素、连接器和任务流;其次,它是开发一个应用系统所做出的最高层次的、以后难以更改的商业的和技术的决定,因此,软件架构是系统成败的重要决定。软件架构是一个应用系统的草图,描述的对象是直接构成应用系统的抽象组件,各个组件之间的连接明确和相对细致地描述了组件间的通讯。因此,一个好的应用程序架构需要满足安全性、可靠性、可扩展性、可维护性以及可定制化这些要求。
图1 .NET中标准的B/S分层式结构
过去软件工程中关注的软件开发大多是针对一个单独的应用系统,即针对特定的用户需求和背景给予分析、设计和实现。随着软件工程领域的不断发展,这种高成本、长周期的开发模式已经不适用现在日益激烈的市场竞争和多变的软件需求。软件产品需要进化,软件的生产模式同样需要进化。领域工程便是实现这种软件生产模式进化的重要手段,使软件生产由“单一模式”走向“工厂模式”。
领域工程包括:领域分析、领域设计与领域实现。领域分析定义领域范围,识别领域中应用的共同特征和可变特征,从而建立领域模型。领域分析基于两个概念:抽象和求精。抽象是一种处理复杂性的有效手段,领域分析使用抽象原则降低复杂性,有效地从领域的一系列应用中抽取特征,创建领域分析产品;对领域分析产品进行求精就可以开发领域中的特定应用。领域设计和领域实现分别根据领域模型给出设计与实现。因此说,领域分析是面向领域的软件工程中开发经验的系统的和正、逆向的整合。
面向领域的软件架构与单一的软件架构不同之处在于增加了领域平台,如图2所示,应用系统层主要指基于领域工程的特定的软件应用;领域平台层主要包括领域框架、领域建模及相应的软件资源库;基础设施层包括各种服务器、数据库及操作系统。一个应用系统可以根据用户的具体需求对领域平台中的资源进行整合,包括选择、裁剪和添加。
图2 面向领域的软件产品架构
基于领域的软件工程过程模型可简化为如图3所示形式。其中需求分析、系统设计和系统实现三个阶段均可以有领域工程的参与,这样软件工作者能够快速并高效地建立一个应用系统。具体来说,任何一个应用程序都可以从领域平台中复用领域通用功能及其相应构件,同时把差异功能及其构件提供给领域平台。
面向领域的. NET应用系统架构就是指借助于.NET开发平台对某一领域问题所建立的通用的软件架构,它的功能在于能够把握许多相似应用程序的结构,为运行一批对象提供了一个有组织的环境。基于该思想应用系统开发转变成以构件库为中心的开发,实现动态地组装构件从而完成软件的即插即用。构件资源库可以是任何已有的或待开发的构件,是对领域中某种功能的实现,可以是共性的资源,也可以是特性的资源。
.NET中构件是包含描述源码中定义和引用类型和成员数据的程序集,面向.NET Framework的编译器向所有的模块和程序集嵌入元数据,使.NET构件成为自描述构件,这种方式有助于构件的无缝集成。.NET的开发环境可以根据服务器构件程序集中的元数据了解服务器构件里的类及其方法、属性、接口及事件等信息,构件的交互只依赖于.NET的基础机制。.NET构件支持语言互用性,在程序编码时允许使用另一种语言所开发的构件。
.NET应用程序和应用程序域通过消息进行彼此的通信,.NET信道服务为此通信提供了基础传输机制。.NET应用程序配置文件相当于COM中系统注册表的作用,登记构件的位置、构件对象的激活类型和通信的信道配置等。.NET模型支持web服务,其底层细节均由.NET框架完成,减少了对操作系统的依赖性。因此,.NET构件之间的交互更简便,给程序开发带来了便利。作为构件技术的.NET简化了构件软件的开发和软件构件的部署,.NET构件模型是一种更理想的软件构件模型。这些也就是在开发大型而复杂的应用系统时建议使用.NET平台的理由。
图3 基于领域的应用系统开发模型
图4 面向领域的LEC应用系统架构
比如对于微软推出的基于ASP.NET的PetShop以及现在具有广泛应用的图书销售系统、电子订餐系统等电子商务类的应用程序,他们在系统架构上和功能上存在极大的相似性,如果逐一开发,就会导致重复工作和效率低下。借助于.NET框架及其优良的构件模型,搭建一个面向领域的轻量级电子商务应用系统(Lightweight Electronic Commerce, LEC)架构。一般来说,该类应用程序包括以下基本功能:用户管理模块、购物车模块、订单结算模块、商品浏览模块、商品管理模块。对应的LEC架构如图4所示。
其中,功能构件库中的构件是可定制的,对于电子商务类门户系统,可以根据用户的具体需求,应用定制工具选取相应的构件。当某个用户的需求没有相应的构件在构件库中存在时,可以向构件库中添加相应构件,因此构件库是可扩充的。采用定制工具这种可配置的体系结构,可以快速满足用户的需求,开发出满足用户的新系统。
良好的系统架构和领域工程的思想可有效地提高软件的可重用性和可维护性。本文通过对.NET框架多层系统架构及构件开发模型的分析,给出了面向领域的轻量级电子商务类应用系统的构件式开发架构,虽然不同领域有不同的特点,但是基于.NET多层架构领域模型的应用系统开发的思路同样适用于其它领域。
[1] 焦金丹, 胡金柱, 等. 基于软件复用的领域分析和建模技术[J]. 微电子学与计算机. 2006, 23(增刊):143-145.
[2] 曾诚. 高性能ASP.NET应用程序的探讨与研究[J]. 湖北大学学报, 2004:22-26.
[3] 章利. 基于.NET的多层分布式企业应用架构的设计与实现[D]. 2007.
[4] 惠长江, 吴江. 软件进化研究综述[J]. 计算机技术与发展, 2007, 17(4):196-200.
[5] 黄玉坤. 软件复用技术及领域工程综述[J]. 计算机与现代化, 2007(11):43-48.
[6] Jesse Liberty, Dan Hurwitz. Programming in ASP.NET[M].Wrox,2004.
[7] Jeffrey. Applied Microsoft.NET Framework programming[M]. Wintellect, 2003.
[8 ] Xuehong Dui, Jianxin Jiao, MitchellM Tseng. Architecture of Product Family for Mass Custiomization[J]. ICMIT,2000:437-443.
[9] BJOINER D.Software engineering 3 domains, requirements and software design[M]. Berlin: Springer, 2006.