桦山涧

桦山涧
Asp.net ---->知识改变命运!
posts - 261, comments - 171, trackbacks - 6, articles - 3
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

何为构建式开发?

Posted on 2007-01-17 11:07 桦林 阅读(...) 评论(...) 编辑 收藏

构件基础知识

  1. 一、什么是构件?

    软件构件是一个高内聚的、通过一组约定的接口完成明晰的功能、符合业界认可的模型标准(如COM/.Net,Corba,WebService等)的、可复用软件包,可在一个体系结构周境下被直接或经适当调整后组装到软件系统中而成为其组成部分。一个构件也可包含若干个子构件。一个构件也可以是Web服务方式的构件。
    构件(component)是可复用的软件组成成份,可被用来构造其他软件。它可以是被封装的对象类、类树、一些功能模块、软件框架 (framwork)、软件构架(或体系结构Architectural)、文档、分析件、设计模式(Pattern)等。构件分为构件类和构件实例,通过给出构件类的参数,生成实例,通过实例的组装和控制来构造相应的应用软件,这不仅大大提高了软件开发者的开发效率,也大大提高了软件的质量。

  2. 二、软件构件背景知识

    软件行业发展的数十年中,程序编写的模式和风格都已发生了很大的变化。最早的程序员是通过直接编写仅仅由0和1组成的机器代码来"告知"机器运行程序的。慢慢的,较高级的用以适应各种不同需求的语言如COBOL、FORTURN不断产生,直至今日,我们见到的编程语言已有数百种之多。其间最大的变化来自 20世纪80年代末90年代初,我们所谓"真正"的高级语言的诞生和"库"及"模块化程序"的变成方法成就了这一巨大变化。这个时期我们称之为 Microsoft公司的"QuickBasic"和Borland公司的"Turbo Pascal"的时代。同时,一些适应市场需求应运而生的出售基于代码级的功能库的第三方软件提供商业在迅速成长。
    1991 年,Microsof公司的"Visual Basic"(VB)的诞生对编程世界产生了翻天覆地的强烈冲击。由于VB是架构在Windows平台上的,所以编程者可以调用系统的动态连接库 (DLLs),这种动态连接库就是早期的构件雏型。同时编程者还可以使用我们称之为"VB Extention"(VBX)的预先做好的功能模块集。也正是因为有了VB,程序员才第一次真正的将自己的应用程序已最直接的方式和编程的操作环境无缝连接。
    应用开发的模式也随之发生了变化。新的程序设计和编写的方式使得开发人员可以通过少量的代码编写实现对已有的功能块的重用和组合来来实现应用的需要。大家小时候一定玩过搭积木的游戏,用各种积木块可以搭出一座我们满意的城堡来。现在,编写程序也变得这么简单了。我们程序员们一行行的编写代码的时代已经延续30年,现在,变革的时候到了,我们现在只需要"组装"已有的功能模块就可以完成应用的开发工作了。这"已有的功能模块"就是我们通常所说的"构件"。

  3. 三、构件相关概念
    1. 软件构件的种类
      1. 黑盒和白盒构件

        原代码构件是白盒构件,可读,程序员在使用时可以直接修改。而黑盒构件则是已编译或二进制格式,独立且不能直接修改。所有的程序员通过描述构件功能的文件和出版的接口了解这些构件。接口包括可视的属性或者新添的值。然后,方法允许构件作事先定义的动作。最后,事件,在构件通知程序员事件发生时引发。使用黑盒构件优于使用白盒构件。黑盒构件不能被程序员直接修改。扩充功能通过创建一个新的"包裹"构件包装和扩展已存在构件来完成。这使得构件原有功能完整无缺,以至于升级、错误修改等事务可以由原始开发者完成。如果你要是想改变白盒构件的原代码,你会得到一个新代码流,那么旧的错误在新的构件实例中就不容易修改,并不断传播。

      2. 商业构件(COTS)

        在90年代早期,一种新的构件产生了。它们是市场上可以购买的构件,也可以称之为开放市场构件。开放市场构件是可以从货架上买走的可重用构件,例如 COM,Java,你可以购买它但不用购买支持、集成或其它类型的服务,的确是"即插即用"的构件。例如,MicroHelp公司的VBTools,基于 Microsoft Visual Basic构件模型(或VBXs),该模型后来成长为基于COM的构件(OCXs),而现在成了基于.NET的构件。现在的开放市场构件以很多了,可以让程序员工作变得简单一些,并让他们专心于完成核心任务。这里的核心任务指将完成公司定义的商业进程或功能,而不是编写所有的普通构件或程序,比如显示、制表、计算、算法,还有其它可以在市场上购买到的构件。重用因为可以重用开放市场构件而得到实现,那就是别人已经编写、测试、文档化了的代码。

      3. Web服务构件

        在局域网成为因特网的分布式环境下,网络服务被提出作为未来的简单扩充。应用构件不再只是呆在一个局域网的一个服务器上,而是放到整个因特网上。网络服务有效地等同于一个被提供的问题解决方法。不仅是提供一个完整的应用,人们还能提供个人构件。 2000年6月以后,主要的平台买主已宣布提供的网络服务有,Microsoft的 .NET、Sun公司的Sun ONE、HP的eServices、Oracle公司的eSpeak,还有IBM的 Websphere program。技术的完全交付还要有一年的时间。

    2. 软件构件的特征

      软件构件具有可复用性(Reusability)、自包含性、一致性、耦合性、内聚性和适应性这几大特征。其中可复用性包括有用性(Usefulness)和可用性(Usability)。有用性是指构件完成的功能是有用的,也就是其功能可出现在很多应用软件中。易用性是指构件要有很好的包装,能很方便地使用它。

    3. 构件的大小

      粒度已经成为许多程序员在使用构件时经常谈论的话题。粒度一词是指一个构件,或一组构件能够提供多少的功能。举一个简单的例子,Fine Grained Component提供将三个数相加的功能,这个构件小、紧密、低商业费用,没有很强的定制性,并且功能独立。而Large Grained Component将提供更多的功能。它可以是一个文件存取库、数据库构件或者是基于"近完全"功能的构架,像CRM,ERP,eCommerce或其它 系统。比如,eCommerce构件可以提供完整eCommerce系统百分之80到90的功能,包括登记,购物车,目录服务,开发票,电子邮件等。它可 以作为一个简单的构件使用,但实际上,它是一个集成构件的构架,可提供大粒度的功能。那么,好的和大的,哪个更好呢?它们各有优缺点。大型构件可以提供大量的应用功能,但它不会像把许多不同的优型构件组合起来那么可定制。这种情况非常正 常,因为优型构件为独立模块,你要编写粘合代码来使得构件可以一起工作满足你的要求。这意味着,编写代码当然会费时。在一个内部编写粘合代码的大型构件 中,你不能定制它,只能放置构架开发者允许你用来定制构架如何工作的性质/属性。

  4. 四、构件库及相关介绍
    1. 构件库简介

      简单来说,构件库是一个对软件构件统一进行形式化包装、分类描述、存储管理、检索浏览的场所。 软件构件库是大范围内、系统化实施软件复用的必备基础设施。要复用软件构件有两个前提条件,一是所需的构件已经存在,二是复用者能方便地找到所需的构件。 由于软件构件蕴涵了大量的信息,对其准确、简洁的描述及其困难,如果没有一个统一的场所对其进行统一的描述包装,大多数企业在应用开发时将难以找到所需构 件,不得不“从零开始”,而构件的一次性开发成本比一般软件高(一般为2到3倍),因此大多数“从零开始”的开发结果又没形成构件,如此循环,将难以形成 系统化的软件复用。

    2. 构件库的作用与意义

      使用软件构件是缩短软件的交付时间和提高软件质量的一条途径,随着复用实践的深入,组织内部将会积累大量自主开发的构件、购买的商业COTS (Commercially-Off-The-Shelf)构件和其他组织开发的NDI(Non-Developmental Item)构件。这些克服用构件构成了庞大的企业资产,而构件库作为分类和管理构件资产的基础设施就变得十分重要。实践中构件数量不断增长,构件也随技术 和领域演化而更新,要在库中众多的构件中寻找必须借助于自动检索工具的支持,另一方面,对单个构件的复用可以划分为构件的识别和检索、构件理解和适应性修 改三部分,因此对于构件的有效管理可以大大的降低复用成本。

  5. 五、软件复用概述
    1. 软件复用的概念

      软件复用(或软件重用)是指充分利用过去软件开发中积累的成果、知识和经验,去开发新的软件系统,使人们在新系统的开发中着重于解决出现的新问题、满足新需求,从而避免或减少软件开发中的重复劳动。

    2. 软件复用的意义

      软件复用使人们在软件开发中不必“重新发明轮子”或“一切从零开始”,提高了软件生产率和质量,缩短开发周期,降低开发成本。软件的重用中没有材料的消 耗,而且软件通过多次重用后其质量和可靠性越来越高。据统计,软件系统的开发中若复用程度达到50%,则其生产率提高40%,开发成本降低约40%,软件出错率降低近50%。 软件工程专家Bohem认为,近十年来软件复用已成为解决软件危机、提高软件生产率和质量的最有效、最具潜力的手段。

    3. 软件复用的粒度

      根据软件复用的粒度可将其分为(按粒度从小到大)如下五类:代码和设计拷贝、源代码复用、设计和软件体系结构(software architecture)复用、应用程序生成器(application generator)和领域特定的软件体系结构(Domain-Specific Software Architecture,DSSA)的复用。

    4. 软件复用的形式

      可以从不同的角度,对软件复用的形式分类。根据复用活动所跨越的领域可分为垂直式(纵向)复用和水平式(横向)复用;根据实现复用的途径可分为组装式(compositional)复用和生成式(generative)复用;根据复用的方式可分为黑盒服用和白盒复用等。

软件构件相关标准规范

  1. 一、构件模型

    软件构件模型是关于开发可复用软件构件和构件之间相互通信的一组标准的描述。通过复用已有的软构件,使用构件对象模型的软件开发者可以像搭积木一样快速构造应用程序。这样不仅可以节省时间和经费,提高工作效率,而且可以产生更加规范、更加可靠的应用软件。
    构件模型是为开发者定义软件构件而建立的体系结构和API集,使开发者可通过软件构件的动态组合来建立应用系统。构件模型由构件与容器两种主要成份构成。构件是具有可复用特性的基本软件部件。容器用于存放和安排构件,实现构件间的交互。容器也可以作为另一个容器的构件使用。 目前,产业界广泛使用的具有代表性的构件模型主要有:对象管理组织OMG的CORBA、微软公司的COM/DCOM/COM+、SUN的J2EE和微软与IBM提出的Web Services。

    1. CORBA

      CORBA分布计算技术是OMG组织基于众多开放系统平台厂商提交的分布对象互操作 内容的基础上制定的公共对象请求代理体系规范。 CORBA分布计算技术是由绝大多数分布计算平台厂商所支持和遵循的系统规范技术,具有模型完整、先进、独立于系统平台和开发语言,被支持程度广泛的特点,已逐渐成为分布计算技术的标准。COBRA标准主要分为3个层次:对象请求代理、公共对象服务和公共设施。最底层是对象请求代理ORB,规定了分布对象的定义(接口)和语言映射,实现对象间的通讯和互操作,是分布对象系统中的"软总线";在ORB之上定义了很多公共服务,可以提供诸如并发服务、名字服务、事务(交易)服务、安全服务等各种各样的服务;最上层的公共设施则定义了组件框架,提供可直接为业务对象使用的服务,规定业务对象有效协作所需的协定规则。 CORBA CCM(CORBA Component Model)技术是在支持POA的CORBA规范(版本 2.3以后)基础上结合EJB当前规范的基础上发展起来的。CORBA构件模型是OMG组织制定的一个用于开发和配置分布式应用的服务器端构件模型规范,它主要包括如下三项内容

      1. 抽象构件模型,用以描述服务器端构件结构及构件间互操作的结构;
      2. 构件容器结构,用以提供通用的构件运行和管理环境,并支持对安全、事务、持久状态等系统服务的集成;
      3. 构件的配置和打包规范,CCM使用打包技术来管理构件的二进制、多语言版本的可执行代码和配置信息,并制定了构件包的具体内容和基于XML的文档内容标准。

      总之,CORBA的特点是大而全,互操作性和开放性非常好。CORBA的缺点是庞大而 复杂,并且技术和标准的更新相对较慢,COBRA规范从1.0升级到2.0所花的时间非常短,而再往上的版本的发布就相对十分缓慢了。在具体的应用中使用不是很多。

    2. COM / DCOM / COM+

      COM(构件对象模型)是Microsoft提出的第一个构件模型。它起源于OLE,当时的 OLE使用DDE(动态数据交换)机制来支持程序之间的通信,由于DDE建立在Windows消息机制基础上,稳定性和效率都很差,由此诞生了COM。 DCOM(分布构件对象模型)是COM技术在分布式环境中的延伸(COM仅支持同一 台计算机上构件之间的互操作)。DCOM用网络协议来代替本地进程之间的通信,并针对分布环境提供了一些新的特性,例如位置透明、网络安全性、跨平台调用等。DCOM的分布功能依靠远程过程调用实现。 MTS( Microsoft 事务服务器)是为满足企业应用而提供的基础设施。MTS可以为分 布式企业应用提供服务器端的构件运行和部署环境,它把企业应用系统的客户程序、应用构件和各种资源有机结合起来(而COM/DCOM无法有效地实现)。 COM+倡导一种新的设计概念,把COM构件提升到应用层,把底层细节留给操作系统,使COM+与操作系统的结合更加紧密。COM+的底层结构仍然以COM为基础,但在应用方式上则更多地继承了MTS(Microsoft Transaction Server)的处理机制,包括MTS的对象环境、安全模型、配置管理等。COM+把COM,DCOM和MTS三者有机统一起来,同时也新增了一些服务,如负载平衡、内存数据库、事件模型、队列服务等,形成一个概念新、功能强的构件体系结构,使COM+形成真正适合于企业应用的构件技术。

    3. J2EE

      为了推动基于Java的服务器端应用开发,Sun在1999年底推出了Java2技术及相关的J2EE规范,J2EE的目标是:提供平台无关的、可移植的、支持并发访问和安全的,完全基于Java的开发服务器端构件的标准。 在J2EE中,Sun给出了完整的基于Java语言开发面向企业分布应用规范。在分布式互操作协议上,J2EE同时支持RMI和IIOP,而在服务器端分布式应用的构造形式,则包括了Java Servlet、JSP(Java Server Page)、EJB等多种形式,以支持不同的业务需求,而且Java应用程序具有“Write once,run anywhere”的特性,使得J2EE技术在分布计算领域得到了快速发展。 J2EE简化了构件可伸缩的、基于构件服务器端应用的复杂度。J2EE是一个规范,不同的厂家可以实现自己的符合J2EE规范的产品。J2EE规范是众多厂家参与制定的,它不为Sun所独有,而且支持跨平台的开发,目前许多大的分布计算平台厂商都公开支持与J2EE兼容技术。 EJB是Sun推出的基于Java的服务器端构件规范J2EE的一部分,自从J2EE推出之后,得到了广泛的发展,已经成为应用服务器端的标准技术。Sun EJB技术是在Java Bean本地构件基础上发展的面向服务器端分布应用构件技术。它基于Java语言,提供了基于Java二进制字节代码的重用方式。EJB给出了系统的服务器端分布构件规范,这包括了构件、构件容器的接口规范以及构件打包、构件配置等的标准规范内容。EJB技术的推出,使得用Java基于构件方法开发服务器端分布式应用成为可能。从企业应用多层结构的角度,EJB是业务逻辑层的中间件技术,与JavaBeans不同,它提供了事务处理的能力,自从三层结构提出以后,中间层也就是业务逻辑层,是处理事务的核心,从数据存储层分离,取代了存储层的大部分地位。从分布式计算的角度,EJB像CORBA一样,提供了分布式技术的基础,提供了对象之间的通讯手段,这是分布式技术的基础 从Internet技术应用的角度,EJB和Servlet,JSP一起成为新一代应用服务器的技术标准。EJB中的Bean可以分为会话Bean和实体 Bean,前者维护会话,后者处理事务。现在Servlet负责与客户端通信,访问EJB,并把结果通过JSP产生页面传回客户端。 J2EE的优点是,服务器市场的主流还是大型机和UNIX平台,这意味着以Java开发构件,能够做到"Write once,run anywhere",开发的应用可以配置到包括Windows平台在内的任何服务器端环境中去。

    4. Web Service

      Web Service是由URI标识的软件应用程序,其接口和绑定可以通过XML构件进行定义、描述和发现,Web服务支持通过基于因特网的协议使用基于XML的消息与其他软件应用程序直接交互。WebService包括一系列相关技术标准规范,通常归为两类:基本Web服务规范和扩展Web服务规范:

      1. 基本Web服务规范
        1. SOAP:(Simple Object Access protocol)即简单对象访问协议,它定义了一个消息框架、编码规则和协议绑定。SOAP有两个方面的用途,一是用来发送消息,一是用来发送用XML格式编码的RPC(远程过程调用)。
        2. WSDL:(WebService Description Language)即WebService描述语言,它用一种和具体编程语言无关的方式定义了WebService收发的有关消息和操作,它保持了协议的中立性,内建了对SOAP绑定的支持。WebService提供的服务是以WSDL标准来叙述的,只要能够取得特定WebService的WSDL就可以从其中了解它所提供的服务以及如何调用这些服务。?
        3. UDDI:(Universal Description,Discovery,and Integration)即通用描述、发现和集成,它定义一个发布和发现WebService相关信息的标准方式。通过提供一个WebService目录的中心位置,WebService提供程序可在其中发布描述如何调用这些服务的相关信息,而使用WebService的程序则可以利用这个WebService目录找寻到符合要求的服务及如何调用的相关信息,正是这种机制使得应用程序间的动态发现、动态调用、动态集成成为可能,它是为大规模分布式应用而设计的。
      2. 扩展Web服务规范

        目前共有数十种扩展Web服务规范,其中几种对企业尤为有用。即

        1. WS-Security:此规范处理加密和数字签名,允许创建特定类型的应用程序,以防止窃听消息,且能实现不可否认功能。
        2. WS-Policy:此规范对WS-Security进行了扩展,允许更具体地说明谁可以采用何种方式使用服务。
        3. WS-I:尽管Web服务应设计成具有互操作性,但在实际中,各个规范对不同实现的解释的灵活性常常足以导致出现问题。WS-I提出了一组可用于防止出现各种问题的标准和时间,并提供了标准化测试来检查问题。

        WebService 解决了不同构件平台、不同操作系统之间的互操作问题,从而使应用系统的设计开发、组装可以按语义方式、面向服务的形式来实现。借助WebService,软件构件可以不再以原有的物理形态(COM组件、DLL文件、ActiveX控件等)来发布,而是以一种“软构件”的形态,以一种“服务”的形式来发布,这样的便利对于大规模的分布应用,对于快速形成超大规模的应用程序来说是至关重要的。

  2. 二、构件描述

    构件描述是基于构件的软件开发和构件复用过程中的一项关键技术,它规定了一个软件构件所需的结构和内容,不仅用于指导软件构件的设计、开发、管理、组装、测试等活动,而且可用于构件库的组织、存储、检索与浏览。现有的构件描述和检索技术起源于好几个领域,目前比较有代表性的方法包括传统的信息科学编目查询技术、基于框架、基于演绎和基于刻面的构件描述与检索方法。对软件构件描述技术规范的研究,主要有以下几个方面:

    1. 3C模型

      3C模型是在1989年的“Reuse in Practice Workshop”中由一些系统工程领域的专家提出的,它是学术界普遍认同的一个具有指导性作用的构件模型。该模型从概念(concept)、内容(content)和周境(context)三个不同方面来描述构件。

      1. 概念:关于“构件做什么”的抽象描述,可以通过概念去理解构件的功能。概念包括接口规约和语义描述两个部分,语义描述和每个操作相关联(至少表示为前后置谓词形式)。
      2. 内容:概念的具体实现,描述构件如何完成概念所刻画的功能。在本质上,内容是对一般用户隐蔽的信息,只有那些企图修改构件的人才需要了解这些信息。
      3. 周境:构件和外围环境在概念级和内容级的关系。周境刻画构件的应用环境,为构件的选用和适应性修改提供指导。
    2. REBOOT模型

      REBOOT(Reuse Based on Object-Oriented Technology基于面向对象技术的复用)构件模型是基于已有构件的一种刻面分类和检索模型。对领域进行分析,并得到一组基本的描述特征,这些特征称为刻面。刻面可以描述构件执行的功能、所操作的数据、构件应用的周境或任何其他特征。一个构件通常包括以下刻面:

      1. 抽象(Abstraction):构件概念的描述性描述(例如stack,flight reservation)
      2. 操作(Operation):构件所提供的操作的描述(例如push,reserve等)
      3. 操作对象(Operates On):描述操作的对象(例如integers,seats)
      4. 依赖(Dependencies):描述构件与外界的依赖关系(例如基于Unix,C++)
    3. UDM和BIDM(IEEE std 1420)标准

      RIG(Reuse library Interoperability Group)在1994年开发了一个数据模型UDM及其子集BIDM,BIDM于1995年提交成为IEEE标准。该模型定义了在支持互操作性的库之间交换软件构件所需要的信息。RIG的技术策略基于ALOAF的三层数据模型,其中包括元模型层、模型层、数据层。元模型(meta-model)提供一组基本组成成分和规则用于软件构件描述数据模型的产生和修改;数据模型(data model)描述在库系统中的软件构件描述数据的结构;数据层(data layer)是由数据模型组织并与数据模型一致的真正的数据,用于具体描述特定的构件。UDM提供一个标准的软件构件描述数据模型,各个库可以将它作为自己的数据模型的中间表示,来和其他库交换适用各自的数据模型的数据。作为定义UDM的一个步骤,RIG开发了“基本可互操作性数据模型”(BIDM),它定义了为实现互操作,复用库交换构件时所需的信息的最小集。

    4. UDDI和WSDL

      基于Web Service的软件构件解决了不同运行平台之间的互操作问题,成为近年来软件构件技术发展的新方向。Web Service构件的描述、发布、发现和集成主要基于WSDL和UDDI.两个由W3C发布的技术标准, WSDL(Web Service Description Language)基于XML技术,分两个层次来描述Web Service 构件:抽象层和具体层。抽象层次通过消息、操作和接口来描述构件行为和功能;具体层描述绑定时的数据格式和绑定点。 UDDI (Universal Description, Discovery and Integration,统一描述、发现和集成协议)规范解决了企业之间的信息共享和数据交互的问题,使得商业实体能从众多在线企业中找到客户和合作伙伴,同时实现彼此的系统和流程的集成。UDDI提供三方面基本功能:①发布,供应商如何注册自己;②查找,应用程序如何查找特定的网络服务;③绑定,在找到网络服务后,应用程序如何与之连接和交互。

    5. 青鸟构件库系统构件分类描述规范

      北大青鸟构件库系统提供以刻面分类为主,关键词、属性-值、关系索引等多种模式相结合的方法对构件进行分类。目前有五个刻面:使用环境(Application Enviroment)、应用领域(Application Domain)、功能(Functionality)、层次(Level of Abstraction)、表示方法(Representation)。

    6. 可复用软件资产规约(RAS)

      RAS是IBM, OMG,ComponentSource, Merrill Lynch等公司和组织合作制订的一套可复用资产描述规范,现已被OMG正式采用作为软件资产描述的工业标准。该规范定义了一套通用的标准和术语以及所需最小化的结构化元信息来描述可复用软件资产的结构、内容、描述和封装方法等,所定义的只是最小化的结构化元信息,用户可用来加以扩展,以支持客户化的数据结构。RAS并非一种具体的分类描述方法,它所定义的是通用性的描述框架,目的在于有效降低软件资产的复用成本。 RAS提供了一种标准的方法用于打包和释放一系列相关的文件。这些文件或工作产物的集合被称为asset(资产)。这一规范提供关于可复用软件资产的结构、内容和描述的一系列指导方针和建议。考虑到有为数众多,种类各异的可复用软件资产的存在,这一规范标识出一些类别,或者相当的类型,并且为这些类别提供普遍的指导方针。RAS定位了可复用工程的元素。它尝试减少因整合,标准封装复用事务而产生的冲突。RAS资产简化了与其他用户共享过程的解决方案,因为大家使用了方便一致的方法来组织,文档化,共享,存储和恢复软件的资产。