【摘 要】本文對幾種經典的軟件體系結構風格進行了具體的闡述,分析了各種風格的特點、優缺點,最后重點介紹了三層C/S軟件體系結構。
【關鍵詞】軟件體系結構 軟件體系結構風格 三層C/S軟件體系結構
20世紀60年代中期的軟件危機使得人們開始重視軟件工程的研究。起初,人們把軟件設計的重點放在數據結構和算法的選擇上。隨著軟件系統規模越來越大、越來越復雜,整個系統的結構顯得越來越重要。
一、軟件體系結構風格分析
最初的軟件體系結構是Mainframe結構——客戶、數據和程序都被集中在主機上,通常只有少量的GUI界面,對遠程數據庫的訪問比較困難。隨著PC的廣泛應用,該結構逐漸被淘汰。在20世紀80年代中期出現了Client/Server分布式計算結構,應用程序的處理在客戶機和服務器之間分擔。隨著大型軟件系統的開發,這種結構在系統的部署和擴展性方面暴漏出不足。隨著Internet的發展,一個更靈活的體系結構“三層/多層計算”體系結構應運而生。
Garlan和Shaw將通用軟件體系結構風格總結為以下幾類:
1.數據流風格:批處理序列;管道/過濾器。2.調用/返回風格:主程序/子程序;面向對象風格;層次結構。3.獨立構件風格:進程通訊;事件系統。4.虛擬機風格:解釋器;基于規則的系統。5.倉庫風格:數據庫系統;超文本系統;黑板系統。
下面將介紹幾種主要和經典的體系結構風格和它們的優缺點。
1.C2風格。C2體系結構風格可以概括為:通過連接件綁定在一起的按照一組規則運作的并行構件網絡。圖1中構件與連接件之間的連接體現了C2風格中構建系統的規則。
C2風格是最常用的一種軟件體系結構風格。從C2風格的組織規則和結構圖中,我們可以得出,C2風格具有以下特點:
(1)系統中的構件可實現應用需求,并能將任意復雜度的功能封裝在一起;(2)所有構件之間的通訊是通過以連接件為中介的異步消息交換機制來實現的;(3)構件相對獨立,構件之間依賴性較少。系統中不存在某些構件將在同一地址空間內執行,或某些構件共享特定控制線程之類的相關性假設。
2.數據抽象和面向對象風格。目前軟件界已普遍轉向使用面向對象系統,抽象數據類型概念對軟件系統有著重要作用。這種風格的構件是對象,或者說是抽象數據類型的實例。對象是一種被稱作管理者的構件,因為它負責保持資源的完整性。對象是通過函數和過程的調用來交互的。圖2是數據抽象和面向對象風格的示意圖。
面向對象的系統有許多的優點:
(1)因為對象對其他對象隱藏它的表示,所以可以改變一個對象的表示,而不影響其他的對象。(2)設計者可將一些數據存取操作的問題分解成一些交互的代理程序的集合。面向對象的系統也存在著某些問題:①為了使一個對象和另一個對象通過過程調用等進行交互,必須知道對象的標識。只要一個對象的標識改變了,就必須修改所有其他明確調用它的對象。②必須修改所有顯式調用它的其他對象,并消除由此帶來的一些副作用。
3.基于事件的隱式調用風格。基于事件的隱式調用風格的思想是構件不直接調用一個過程,而是觸發或廣播一個或多個事件。系統中的其他構件中的過程在一個或多個事件中注冊,當一個事件被觸發,系統自動調用在這個事件中注冊的所有過程,這樣,一個事件的觸發就導致了另一模塊中的過程的調用。基于事件的隱式調用風格的主要特點是事件的觸發者并不知道哪些構件會被這些事件影響。這樣不能假定構件的處理順序,甚至不知道哪些過程會被調用。隱式調用系統的主要優點有:(1)為軟件重用提供了強大的支持。當需要將一個構件加入現存系統中時,只需將它注冊到系統的事件中。(2)為改進系統帶來了方便。當用一個構件代替另一個構件時,不會影響到其他構件的接口。隱式調用系統的主要缺點有:①構件放棄了對系統計算的控制。一個構件觸發一個事件時,不能確定其他構件是否會響應它。而且即使它知道事件注冊了哪些構件的構成,它也不能保證這些過程被 調用的順序。②數據交換的問題。有時數據可被一個事件傳遞,但另一些情況下,基于事件的系統必須依靠一個共享的倉庫進行交互。在這些情況下,全局性能和資源管理便成了問題。③既然過程的語義必須依賴于被觸發事件的上下文約束,關于正確性的推理存在問題。
4.管道/過濾器風格。在管道/過濾器風格的軟件體系結構中,每個構件都有一組輸入和輸出,構件讀輸入的數據流,經過內部處理,然后產生輸出數據流。這個過程通常通過對輸入流的變換及增量計算來完成,所以在輸入被完全消費之前,輸出便產生了。因此,這里的構件被稱為過濾器,這種風格的連接件就象是數據流傳輸的管道,將一個過濾器的輸出傳到另一過濾器的輸入。
圖3是管道/過濾器風格的示意圖。
管道/過濾器風格的軟件體系結構的優點:
(1)使得軟構件具有良好的隱蔽性和高內聚、低耦合的特點;(2)支持軟件重用。重要提供適合在兩個過濾器之間傳送的數據,任何兩個過濾器都可被連接起來;(3)系統維護和性能增強簡單;(4)支持并行執行。每個過濾器是作為一個單獨的任務完成,因此可與其他任務并行執行。管道/過濾器風格的主要缺點:①通常導致進程成為批處理的結構。這是因為雖然過濾器可增量式地處理數據,但它們是獨立的,所以設計者必須將每個過濾器看成一個完整的從輸入到輸出的轉換。②不適合處理交互的應用。當需要增量地顯示改變時,這個問題尤為嚴重。③因為在數據傳輸上沒有通用的標準,每個過濾器都增加了解析和合成數據的工作,這樣就導致了系統性能下降,并增加了編寫過濾器的復雜性。
5.批處理風格。批處理風格的每一步處理都是獨立的,并且每一步是順序執行的,只有當前一步處理完后,后一步處理才能開始,數據傳送在步與步之間作為一個整體。批處理的典型應用是經典數據處理和程序開發。
批處理風格與管道過濾器風格的共同點是把任務分解成一系列固定順序的計算單元(組件),組件間只通過數據傳遞交互。區別表現在以下幾個方面:批處理是全部的、高潛伏性的、輸入時可隨機存取、無合作性、無交互性,管道過、濾器是遞增的、數據結果延遲小、輸入時處理局部化、有反饋、可交互。
6.倉庫風格。在倉庫風格中,有兩種不同的構件:中央數據結構說明當前狀態,獨立構件在中央數據存貯上執行,倉庫與外構件間的相互作用在系統中會有大的變化。
若輸入流中某類時間觸發進程執行的選擇,則倉庫是一傳統型數據庫;另一方面,若中央數據結構的當前狀態觸發進程執行的選擇,則倉庫是一黑板系統。
二、三層C/S軟件體系結構分析
C/S軟件體系結構是20世紀90年代成熟起來的技術,它將應用一分為二,服務器(后臺)負責數據管理,客戶機(前臺)完成與用戶的交互任務。
傳統的二層C/S結構存在以下幾個局限:1.二層C/S結構是單一服務器且以局域網為中心的,所以難以擴展至大型企業廣域網或Internet;2.軟、硬件的組合及集成能力有限;3.客戶機的負荷太重,難以管理大量的客戶機,系統的性能容易變壞;4.數據安全性不好。因為二層C/S有這么多缺點,三層C/S結構應運而生。三層C/S結構是將應用功能分成表示層、功能層和數據層三個部分,如下圖所示。
表示層是應用的用戶接口部分,它擔負著用戶與應用間的對話功能。表示層一般使用圖形用戶接口,操作簡單、易學易用。功能層相當于應用的本體,它是將具體的業務處理邏輯編入程序中。功能層的程序多半是用可視化編程工具開發的。數據層就是數據庫管理系統,負責管理對數據庫數據的讀寫。數據庫管理系統必須能迅速執行大量數據的更新和檢索。因此,一般從功能層傳送到數據層的要求大都使用SQL語言。
對二層C/S結構的局限,三層C/S的解決方案是:對這三層進行明確分割,并在邏輯上使其獨立。與傳統的二層結構相比,三層C/S結構具有以下優點:
1.允許合理地劃分三層結構的功能,使之在邏輯上保持相對獨立性,從而使整個系統的邏輯結構更為清晰,能提高系統和軟件的可維護性和可擴展性。2.允許更靈活有效地選用相應的平臺和硬件系統,使之在處理負荷能力上與處理特性上分別適應于結構清晰的三層;并且這些平臺和各個組成部分可以具有良好的可升級性和開放性。3.三層C/S結構中,應用的各層可以并行開發,各層也可以選擇各自最適合的開發語言。使之能并行地而且是高效地進行開發,達到較高的性能價格比;對每一層的處理邏輯的開發和維護也會更容易些。4.允許充分利用功能層有效地隔離開表示層與數據層,未授權的用戶難以繞過功能層而利用數據庫工具或黑客手段去非法地訪問數據層,這就為嚴格的安全管理奠定了堅實的基礎;整個系統的管理層次也更加合理和可控制。
軟件體系結構風格為大粒度的軟件重用提供了可能。然而,對于應用體系結構風格來說,由于視點的不同,系統設計師有很大的選擇空間。要為系統選擇或設計某一個體系結構風格,必須根據特定項目的具體特點,進行分析比較后再確定。不同的結構有不同的處理能力的強項和弱點,一個系統的體系結構應該根據實際需要進行選擇,以解決實際問題。
參考文獻:
[1]Shaw M, Garlan D, Software Architecture Perspectives on an emerging discipline, Prentice Hall, 1996
[2]馮 沖 江 賀 馮靜芳編著:軟件體系結構理論與實踐.人民郵電出版社
[3]Mary Shaw. Making Choices:A comparison of styles forsoftware architecture[J].IEEE Software,special issue onsoftware architecture,1995
[4]覃 征 何堅等編著:軟件體系結構.西安交通大學出版社
論文指導 >
SCI期刊推薦 >
論文常見問題 >
SCI常見問題 >