程序架構概念

1.架構引言:  

在實踐中,人們發現架構也是存在模式的。好比,對於系統結構設計,咱們使用層模式;對於分佈式系統,咱們使用代理模式;對於交互系統,咱們使用MVC(模型-視圖-控制器)模式。模式原本就是針對特定問題的解,所以,針對需求的特色,咱們也能夠採用相應的模式來設計架構。 

設計模式是支撐架構的重要組件html

架構設計也相似一種工做流,它是動態的,這點不象建築設計那樣,一開始就能徹底肯定,架構設計伴隨着整個項目的進行過程之中,有兩種具體操做保證架構設計的正確完成,那就是設計模式(靜態)和工程項目方法(RUP或XP 動態的)。java

設計模式是支撐架構的一種重要組件,這與建築有很相象的地方,一個建築物創建設計須要建築架構設計,在具體施工中,有不少建築方面的規則和模式。程序員

咱們從J2EE藍圖模式分類http://java.sun.com/blueprints/patterns/catalog.html中就能夠很清楚的看到J2EE這樣一個框架軟件的架構與設計模式的關係。數據庫

架構設計是骨架,設計模式就是肉設計模式

這樣,一個比較豐富的設計方案能夠交由程序員進一步完成了,載輔助以適當的工程方法,這樣就可保證項目的架構設計能正確快速的完成。安全

時刻牢記架構設計的目標服務器

2.架構設計的目標:網絡

因爲架構設計是在動態中完成的,所以在把握架構設計的目標上就很重要,所以在整個項目過程當中,甚至每一步咱們都必須牢記咱們架構設計的整體目標,能夠歸納下面幾點:架構

  1. 最大化的重用:這個重用包括組件重用 和設計模式使用等多個方面。框架

好比,咱們項目中有用戶註冊和用戶權限系統驗證,這實際上是個通用課題,每一個項目只是有其內容和一些細微的差異,若是咱們以前有這方面成功研發經驗,能夠直接重用,若是沒有,那麼咱們就要進行這個子項目的研發,在研發過程當中,不能僅僅看到這個項目的需求,也要以架構的概念去完成這個能夠稱爲組件的子項目。

  2. 儘量的簡單明瞭:咱們解決問題的總方向是將複雜問題簡單化,其實這也是中間件或多層體系技術的根本目標。可是在具體實施設計過程當中,咱們可能會將簡單問題複雜化,特別是設計模式的運用上很容易範這個錯誤,所以如何儘量的作到設計的簡單明瞭是不容易的。

我認爲落實到每一個類的具體實現上要真正能體現系統事物的本質特徵,由於事物的本質特徵只有一個,你的代碼越接近它,表示你的設計就是簡單明瞭,越簡單明瞭,你的系統就越可靠。更多狀況是,一個類並不能反應事物本質,須要多個類的組合協調,那麼可以正確使用合適的設計模式就稱爲重中之重。

咱們看一個具有好的架構設計的系統代碼時,基本看到的都是設計模式,寵物店(pet store)就是這樣的例子。或者能夠這樣說,一個好的架構設計基本是由簡單明瞭的多個設計模式完成的。

  3. 最靈活的拓展性:架構設計要具有靈活性 拓展性,這樣,用戶能夠在你的架構上進行二次開發或更加具體的開發。

要具有靈活的拓展性,就要站在理論的高度去進行架構設計,好比如今工做流概念逐步流行,由於咱們具體不少實踐項目中都有工做流的影子,工做流中有一個樹形結構權限設定的概念就對不少領域比較通用。

3.定義:

  軟件架構(software architecture)是一系列相關的抽象模式,用於指導大型軟件系統各個方面的設計。軟件架構是一個系統的草圖。

4.相關概念:

  軟件體系結構是構建計算機軟件實踐的基礎。與建築師設定建築項目的設計原則和目標,做爲繪圖員畫圖的基礎同樣,一個軟件架構師或者系統架構師陳述軟件構架以做爲知足不一樣客戶需求的實際系統設計方案的基礎。

5.分類:

根據咱們關注的角度不一樣,能夠將架構分紅三種:

邏輯架構

軟件系統中元件之間的關係,好比用戶界面,數據庫, 外部系統接口, 商業邏輯元件,等等。
好比下面就是筆者親身經歷過的一個軟件系統的邏輯架構圖
圖二、一個邏輯架構的例子
從上面這張圖中能夠看出,此係統被劃分紅三個邏輯層次,即表象層次,商業層次和數據持久層次。每個層次都含有多個邏輯元件。好比 WEB服務器層次中有HTML服務元件、Session服務元件、安全服務元件、系統管理元件等。

物理架構

軟件元件是怎樣放到硬件上的。
好比下面這張物理架構圖描述了一個分佈於北京和上海的 分佈式系統的物理架構,圖中全部的元件都是 物理設備,包括 網絡分流器代理服務器、WEB服務器、 應用服務器報表服務器、整合服務器、 存儲服務器、主機等等。

系統架構

系統的非功能性特徵,如可擴展性、可靠性、強壯性、靈活性、性能等。
系統架構的設計要求架構師具有軟件和硬件的功能和性能的過硬知識,這一工做無疑是 架構設計工做中最爲困難的工做。
此外,從每個角度上看,均可以看到架構的兩要素:元件劃分和設計決定。
首先,一個軟件系統中的元件首先是邏輯元件。這些邏輯元件如何放到硬件上,以及這些元件如何爲整個系統的可擴展性、可靠性、強壯性、靈活性、性能等作出貢獻,是很是重要的信息。
其次,進行 軟件設計須要作出的決定中,必然會包括 邏輯結構物理結構,以及它們如何影響到系統的全部非功能性特徵。這些決定中會有不少是一旦做出,就很難更改的。
根據做者的經驗,一個基於數據庫的系統架構,有多少個數據表,就會有多少頁的 架構設計文檔。好比一箇中等的 數據庫應用系統一般含有一百個左右的數據表,這樣的一個系統設計一般須要有一百頁左右的架構設計文檔。
 
6.實踐:
實踐中的理解
軟件架構是對軟件系統運行時元素的抽象,軟件系統可能有不少層抽象,或由多重業務流程所組成,每層抽象或每一個業務流程都有本身的軟件架構。
軟件架構是平衡的藝術。
 
 參考:http://blog.csdn.net/gerryzhu/article/details/17379639
相關文章
相關標籤/搜索