- 基于Struts、Hibernate、Spring架構的Web應用開發
- 范新燦編著
- 1531字
- 2018-12-30 14:56:28
1.1 軟件開發架構
1.軟件架構的定義
計算機軟件的歷史開始于20世紀50年代,歷史非常短暫,而相比之下,建筑工程則從石器時代就開始了,人類在幾千年的建筑設計實踐中積累了大量的經驗和教訓。建筑設計基本上包含兩點,一是建筑風格,二是建筑模式。獨特的建筑風格和恰當的建筑模式,可以使一個建筑獨一無二。
圖1-1所示為中美洲古代瑪雅建筑——Chichen-Itza大金字塔,9個巨大的石級堆壘而上, 91級臺階(象征著四季的天數)奪路而出,塔頂的神殿聳入云天。所有的數字都如日歷般嚴謹,風格雄渾。與此類似地,自從有了建筑以來,建筑與人類的關系就一直是建筑設計師必須面對的核心問題。

圖1-1 位于墨西哥的古瑪雅建筑
幾乎所有的軟件設計理念都可以在浩如煙海的建筑學歷史中找到更為遙遠的歷史回響。軟件與人類的關系是架構師必須面對的核心問題,也是自從軟件進入歷史舞臺之后就出現的問題。什么是軟件系統的架構(Architecture)?一般而言,架構有兩個要素:
(1)它是一個軟件系統從整體到部分的最高層次的劃分。
一個系統通常是由元件組成的,而這些元件如何形成,相互之間如何發生作用,則是關于這個系統本身結構的重要信息。
詳細地說,它包括架構元件(Architecture Component)、聯結器(Connector)、任務流(Task-flow)。所謂架構元件,也就是組成系統的核心“磚瓦”,而聯結器則描述這些元件之間通信的路徑、通信的機制、通信的預期結果,任務流則描述系統如何使用這些元件和聯結器完成某一項需求。
(2)建造一個系統所作出的最高層次的、以后難以更改的商業和技術的決定。
在建造一個系統之前會有很多的重要決定需要事先作出,而一旦系統開始進行詳細設計甚至建造,這些決定就很難更改甚至無法更改。顯然,這樣的決定必定是有關系統設計成敗的最重要決定,必須經過非常慎重的研究和考察。
2.軟件架構的目標
正如同軟件本身有其要達到的目標一樣,架構設計要達到的目標是什么呢?一般而言,軟件架構設計要達到如下的目標:
(1)可靠性(Reliable)。軟件系統對于用戶的商業經營和管理來說極為重要,因此軟件系統必須非常可靠。
(2)安全行(Secure)。軟件系統所承擔的交易的商業價值極高,系統的安全性非常重要。
(3)可擴展性(Scalable)。軟件必須能夠在用戶的使用率和用戶數目增加很快的情況下,保持合理的性能。只有這樣,才能適應用戶的市場擴展。
(4)可定制化(Customizable)。同樣的一套軟件,可以根據客戶群的不同和市場需求的變化來進行調整。
(5)可擴展性(Extensible)。在新技術出現的時候,一個軟件系統應當允許導入新技術,從而對現有系統進行功能和性能的擴展。
(6)可維護性(Maintainable)。軟件系統的維護包括兩個方面,一是排除現有的錯誤,二是將新的軟件需求反映到現有系統中去。一個易于維護的系統可以有效地降低技術支持的花費。
(7)客戶體驗(Customer Experience)。軟件系統必須易于使用。
(8)市場時機(Time to Market)。軟件用戶要面臨同業競爭,軟件提供商也要面臨同業競爭。以最快的速度爭奪市場先機則非常重要。
基于Java技術的軟件開發架構,宏觀上的層次如圖1-2所示。

圖1-2 軟件開發架構
在具體的實現中,表現層可為Struts/JSF等,業務層、訪問層可為JavaBean或EJB等,資源層一般為數據庫。
注意
軟件設計師中有一些技術水平較高、經驗較為豐富的人,他們需要承擔軟件系統的架構設計,也就是需要設計系統的元件如何劃分、元件之間如何發生相互作用,以及系統中邏輯的、物理的、系統的重要決定的作出。
這樣的人就是所謂的架構師(Architecter)。在很多公司中,架構師不是一個專門的和正式的職務。通常在一個開發小組中,最有經驗的程序員會負責一些架構方面的工作。在一個部門中,最有經驗的項目經理會負責一些架構方面的工作。
但是,越來越多的公司認識到架構工作的重要性,并且在不同的組織層次上設置專門的架構師位置,由他們負責不同層次上的邏輯架構、物理架構、系統架構的設計、配置、維護等工作。