一:構件與軟件的重用
1:軟件重用
軟件重用(軟件復用)是使用已有的軟件產品(如設計、代碼、文檔等)來開發新的軟件系統的過程。
軟件重用的形式大體可分為垂直式重用和水平式重用。
水平式重用是重用不同應用領域中的軟件元素,例如數據結構、排序算法、人機界面構件等。標准函數庫是一種典型的原始的水平式重用機制。
垂直式重用是在一類具有較多公共性的應用領域之間重用軟件構件。垂直式重用活動的主要關鍵點在於領域分析:根據應用領域的特征和相似性,預測軟件構件的可重用性。
2:構件標准
構件是軟件系統可替換的、物理的組成部分,它封裝了實現體(實現某個職能),並提供了一組接口的實現方法。可以認為構件是一個封裝的代碼模塊或大粒度的運行時模塊,也可以將構件理解為具有一定功能、能夠獨立工作或與其它構件組合起來協調工作的對象。
構件應當是內聚的,並具有相當穩定的、公開的接口。
3:構件的獲取
在建立基於構件的軟件開發中,構件獲取可以有多種不同的途徑:
(1)從現有構件中獲得符合要求的構件,直接使用或作適應性(flexibility)修改,得到可重用的構件。
(2)通過遺留工程(legacy engineering),將具有潛在重用價值的構件提取出來,得到可重用的構件。
(3)從市場上購買現成的商業構件,即COTS(Commercial Off-The-Shell)構件。
(4)開發新的符合要求的構件。
4:構件管理
構件管理的內容包括構件描述、構件分類、構件庫組織、人員及權限管理和用戶意見反饋等。
1. 構件的組織
對已有的構件分類方法可以歸納為三大類,分別是關鍵字分類法、刻面分類法和超文本組織方法。
(1)關鍵字分類法(keyword classification):根據領域分析的結果將應用領域的概念按照從抽象到具體的順序逐次分解為樹形或有向無回路圖結構。每個概念用一個描述性的關鍵字表示。
(2)刻面分類法(faceted classification):定義若干用於刻畫構件特征的“面”(facet),每個面包含若干概念,這些概念描述構件在面上的特征。刻面可以描述構件執行的功能、被操作的數據、構件應用的語境或任意其他特征。描述構件的刻面的集合稱為刻面描述符(facet descriptor),通常,刻面描述被限定不超過7或8個刻面。
關鍵字分類法和刻面分類法都是以數據庫系統作為實現背景的。盡管關系數據庫可供選用,但面向對象數據庫更適於實現構件庫,因為其中的復合對象、多重繼承等機制與表格相比更適合描述構件及其相互關系。
(3)超文本方法(hypertext classification):與基於數據庫系統的構件庫組織方法不同,它基於全文檢索技術。其主要思想是:所有構件必須輔以詳盡的功能或行為說明文檔;說明中出現的重要概念或構件以網狀鏈接方式相互連接;檢索者在閱讀文檔的過程中可按照人類的聯想思維方式任意跳轉到包含相關概念或構件的文檔;全文檢索系統將用戶給出的關鍵字與說明文檔中的文字進行匹配,實現構件的瀏覽式檢索。超文本是一種非線性的網狀信息組織方法,它以結點為基本單位,鏈作為結點之間的聯想式關聯。超文本組織方法為構造構件和重用構件提供了友好、直觀的多媒體方式。由於網狀結構比較自由、松散,因此,超文本方法比前兩種方法更易於修改構件庫的結構。
2. 構件分類
如果把軟件系統看成是構件的集合,那么從構件的外部形態來看,構成一個系統的構件可分為5類:
(1)獨立而成熟的構件。獨立而成熟的構件得到了實際運行環境的多次檢驗,該類構件隱藏了所有接口,用戶只需用規定好的命令進行使用。例如,數據庫管理系統和操作系統等。
(2)有限制的構件。有限制的構件提供了接口,指出了使用的條件和前提,這種構件在裝配時,會產生資源沖突、覆蓋等影響,在使用時需要加以測試。例如,各種面向對象程序設計語言中的基礎類庫等。
(3)適應性構件。適應性構件進行了包裝或使用了接口技術,把不兼容性、資源沖突等進行了處理,可以直接使用。這種構件可以不加修改地使用在各種環境中。例如ActiveX等。
(4)裝配的構件。裝配的構件在安裝時,已經裝配在操作系統、數據庫管理系統或信息系統不同層次上,使用膠水代碼(glue code)就可以進行連接使用。目前一些軟件商提供的大多數軟件產品都屬這一類。
(5)可修改的構件。可修改的構件可以進行版本替換。如果對原構件修改錯誤、增加新功能,可以利用重新“包裝”或寫接口來實現構件的替換。這種構件在應用系統開發中使用得比較多。
3:人員權限管理
一般來講,構件庫系統可包括五類用戶,即注冊用戶、公共用戶、構件提交者、一般系統管理員和超級系統管理員。他們對構件庫分別有不同的職責和權限,這些人員相互協作,共同維護着構件庫系統的正常運作。同時,系統為每一種操作定義一個權限,包括提交構件、管理構件、查詢構件及下載構件。每一用戶可被賦予一項或多項操作權限,這些操作權限組合形成該人員的權限,從而支持對操作的分工,為權限分配提供了靈活性。
5:構件重用
1. 檢索與提取構件
2. 理解與評價構件
3. 修改構件
4. 構件組裝
二:中間件技術
為解決分布異構問題,人們提出了中間件的概念。中間件是位於平台(硬件和操作系統)和應用之間的通用服務,這些服務具有標准的程序接口和協議。
優勢:
中間件作為一大類系統軟件,與操作系統、數據庫管理系統並稱“三駕馬車”,它的優越性體現在以下幾個方面:
縮短應用的開發周期、節約應用的開發成本、減少系統初期的建設成本、降低應用開發的失敗率、保護已有的投資、
簡化應用集成、減少維護費用、提高應用的開發質量、保證技術進步的連續性、增強應用的生命力。
具體地說,中間件屏蔽了底層操作系統的復雜性,使程序開發人員面對一個簡單而統一的開發環境,減少程序設計的復雜性,將注意力集中在自己的業務上,不必再為程序在不同系統軟件上的移植而重復工作,從而大大減少了技術上的負擔。
中間件為上層應用屏蔽了異構平台的差異,而其上的框架又定義了相應領域內的應用的系統結構、標准的服務組件等,用戶只需告訴框架所關心的事件,然后提供處理這些事件的代碼。當事件發生時,框架則會調用用戶的代碼。用戶代碼不用調用框架,用戶程序也不必關心框架結構、執行流程、對系統級API的調用等,所有這些由框架負責完成。
因此,基於中間件開發的應用具有良好的可擴充性、易管理性、高可用性和可移植性。
層次:
從中間件的層次上來划分,可分為底層型中間件、通用型中間件和集成型中間件三個大的層次。
底層型中間件的主流技術有JVM(Java Virtual Machine,Java虛擬機)、CLR(Common Language Runtime,公用語言運行時)、ACE(Adaptive Communication Environment,自適應通信環境)、JDBC和ODBC等,代表產品有Sun JVM和Microsoft的CLR;
通用型中間件的主流技術有CORBA、EJB、COM/DCOM等,代表產品主要有IONA Orbix、BEA WebLogic和IBM MQSeries等;集成型中間件的主流技術有WorkFlow和EAI等,代表產品主要有BEA WebLogic和IBM WebSphere等。
由於中間件需要屏蔽分布環境中異構的操作系統和網絡協議,它必須能夠提供分布環境下的通訊服務,我們將這種通訊服務稱之為平台。
基於目的和實現機制的不同,我們將平台分為
遠程過程調用(Remote Procedure Call,RPC)、
面向消息的中間件(Message-Oriented Middleware,MOM)、
對象請求代理(Object Request Brokers,ORB)
它們可向上提供不同形式的通訊服務,包括同步、排隊、訂閱發布、廣播等,在這些基本的通訊平台之上,可構築各種框架,為應用程序提供不同領域內的服務。
三:應用服務器
就具體的產品類型來看,目前市場中主要有6種類型,分別是事務服務器、知識服務器、帶有集成開發工具的應用服務器、協作服務器、瘦服務器和主機訪問服務器。不過,具體的服務器產品並不一定會是某種特點功能,往往是兼而有之。
四:J2EE與.NET平台
J2EE
(1)EJB。EJB是Java服務器端的構件模型。EJB容器作為EJB構件的執行環境,提供服務器端的系統級功能,包括線程管理、狀態管理和安全管理等。
EJB定義了訪問構件服務的分布式客戶接口模型,通過RMI-IIOP(Java Remote Method Invocation-Internet Inter-ORB Protocol),EJB可以同COBRA對象進行互操作。使用Java開發的EJB具有一次編寫到處運行的優點,按照標准開發的EJB構件可以部署到任何一個支持EJB標准的應用服務器中。使用EJB開發企業應用,可以縮短開發周期,開發人員只需要將注意力集中在業務邏輯的實現上,底層服務完全由EJB容器提供。使用EJB開發的業務邏輯部分具有很好的移植性,不需要更改EJB的代碼,開發人員能夠將EJB從一種操作環境移植到另一種操作環境。
(2)JDBC。JDBC是Java語言連接數據庫的標准,從免費的Mysql到企業級的DB2和Oracle,JDBC都提供了很好的接口。
JDBC API有兩個部分,一個用來訪問數據庫的應用程序級的接口,另一個用來將JDBC驅動整合到J2EE平台中的服務提供商接口。
(3)Java Servlet(Java服務器端小程序)。在Servlet技術中封裝了HTTP協議,開發者不需要處理復雜的網絡連接和數據包,就可以擴展Web服務器的功能。類似於其他的服務器端程序,Servlet完全運行於Web服務器中,具有不錯的效率和更好的移植性。
(4)JSP(Java Server Page,Java服務器頁面)。可以認為是一種高層的Servlet,在服務器端,JSP總是首先被編譯成Servlet運行的。如同在ASP(Active Server Page,動態服務器頁面)中直接使用VBScript一樣,使用JSP可以直接在HTML代碼中嵌入Java代碼,並提交給服務器運行。使用JSP便於邏輯和表現形式的分離。
(5)JMS(Java Message Service,Java消息服務)。JMS是一個消息標准,它允許J2EE應用程序建立、發送、接收和閱讀消息。它使得建立連接簡單的、可靠的和異步的分布式通信成為可能。
(6)JNDI(Java Naming and Directory Interface,Java命名目錄接口)。JNDI提供命名的目錄功能,為應用程序提供標准的目錄操作的方法,
例如,獲得對象的關聯屬性、根據它們的屬性搜尋對象等。使用JNDI,一個J2EE應用程序可以存儲和重新得到任何類型的命名Java對象。因為JNDI不依賴於任何特定的執行,應用程序可以使用JNDI訪問各種命名目錄服務,這使得J2EE應用程序可以和傳統的應用程序和系統共存。
(7)JTA(Java Transaction API,Java事務API)。JTA提供事務處理的標准接口,EJB使用JTA與事務處理服務器通信。JTA提供啟動事務、加入現有的事務、執行事務處理和恢復事務的編程接口。
(8)Java Mail API(Java郵件API)。J2EE應用程序可以使用Java Mail API來發送電子郵件。Java Mail API包含兩部分,分別是應用程序級接口和服務接口。
(9)JAXP(Java XML解析API)。JAXP支持DOM、SAX(Simple API for XML,簡單應用程序接口)、XSLT(eXtensible Stylesheet Language for Transformation)轉換引擎。JAXP使得應用程序可以更簡單的處理XML。
(10)JCA(J2EE Connector Architecture,J2EE連接架構)。JCA是對J2EE標准集的重要的補充,它注重的是用於將Java程序連接到非Java程序和軟件包的中間件的開發。JCA包括三個關鍵的元素,分別是資源適配器、系統界面、通用客戶界面。JCA在功能上比Web服務要豐富,但是它發布起來更難,而且限制了只能從Java環境訪問它們。
(11)JAAS(Java Authentication Authorization Service,Java認證和授權服務)。JAAS提供靈活和可伸縮的機制來保證客戶端或服務器端的Java程序,它讓開發者能夠將一些標准的安全機制通過一種通用的,可配置的方式集成到系統中。
VO(View Object):視圖對象,用於展示層,它的作用是把某個指定頁面(或組件)的所有數據封裝起來。
DTO(Data Transfer Object):數據傳輸對象,這個概念來源於J2EE的設計模式,原來的目的是為了EJB的分布式應用提供粗粒度的數據實體,以減少分布式調用的次數,從而提高分布式調用的性能和降低網絡負載,但在這里,我泛指用於展示層與服務層之間的數據傳輸對象。
DO(Domain Object):領域對象,就是從現實世界中抽象出來的有形或無形的業務實體。
PO(PersistentObject):持久化對象,它跟持久層(通常是關系型數據庫)的數據結構形成一一對應的映射關系,如果持久層是關系型數據庫,那么,數據表中的每個字段(或若干個)就對應PO的一個(或若干個)屬性。
.NET平台
(1)操作系統是.NET平台的基礎,在操作系統方面,Microsoft有着強大的開發能力,目前的.NET平台可以運行在多個由Microsoft提供的操作系統中。
(2).NET Enterprise Servers提供了包括Application Center、BizTalk Server、CommerceServer等一系列服務器產品,通過這些產品可以縮短構建大型企業應用系統的周期。
(3).NET Building Block Services指的是一些成型的服務,例如,由Microsoft提供的NET Passport服務等。.NET的開發者可以以付費的方式直接將這些服務集成在自己的應用程序中。
(4).NET Framework位於整個.NET平台的中央,為開發.NET應用提供低層的支持。.NET Framework的核心部分是CLR。CLR是.NET程序的執行引擎,.NET的眾多優點也是由CLR所賦予的。CLR同JVM的功能類似,提供了單一的運行環境。任何.NET應用程序都會被最終編譯成為IL(Intermediate Language,中間語言),並在這個統一的環境中運行。也就是說,CLR可以用於任何針對它的編程語言,這也就是.NET的多語言支持功能。CLR還負責.NET應用程序的內存管理、對象生命期的管理、線程管理、安全等一系列的服務。
(5)Visual Studio.NET是.NET應用程序的集成開發環境,它位於.NET平台的頂端。Visual Studio.NET是一個強大的開發工具集合,里面集成了一系列.NET開發工具,如:C#.NET、VB.NET、XML Schema Editor等。
