軟體架構介紹

來源:互聯網
上載者:User

標籤:

此文介紹軟體的架構                                        

 

什麼是軟體架構以及為何我們需要它?

就如同其他複雜結構一樣,軟體必須要建構在一個堅實的基礎之上。沒有考慮到關鍵情境,沒有針對常見問題的設計,或者沒有考慮一些重要決定帶來的長期結果,就會將你的軟體應用程式置於危險之中。代碼沒有架構,就如同花園中的常青藤,會變得很難維護,添加新特性也困難。

軟體架構是一個技術藍圖,詮釋了在最佳化諸如軟體效能,安全性以及可管理性等常見的屬性時候系統是如何由子系統(模組)構建的。

Philippe Kruchten, Grady Booch, Kurt Bittner以及Rich Reitman在Mary Shaw and David Garlan (Shaw and Garlan 1996)的成果基礎上延伸並提煉出了對軟體架構的定義。他們是這麼定義的:

軟體架構包含關於一個軟體系統組織圖方面的諸多重要決策,包括如何選擇系統構成的結構元素以及結構;那些元素間協作的特定行為;這些結構以及行為元素如何組成一個更大的子系統;指引這個組織圖的架構風格。軟體架構還包含功能性,可用性,適用性,軟體效能,重用性,經濟以及技術方面的限制,折中方案以及美學等諸多方面的考量。

 

Patterns of Enterprise Application Architecture 中,Martin Fowler 概括了一些解釋架構是經常提到的主題。他認為這些主題是:

一個系統在最進階別上分解為多個局部;不易變化的決定;一個系統可以有多個架構;明顯架構化的東西也會在一個系統的生命週期裡變化;最後,架構歸結為任何重要的東西。

在 Software Architecture in Practice (2nd edition )中,Bass, Clements 和 Kazman 這樣定義架構:

一個程式或電腦系統的軟體架構是指系統的一個結構或多個結構,它們組成軟體元素,元素的外部可見度,元素間的關係。架構關心公用介面;元素的私人細節——內部實現的細節——不是架構。

架構的目標是識別出影響應用結構的需求。優秀的架構能減低構建一個技術解決方案的業務風險。優秀的設計是足夠靈活的,可以應對隨時變化的硬體與軟體技術,以及使用者情境與需求。


軟體架構提供了一些益處,包括:

  • 更高的生產效率。 結構確定了,那就更容易想已有的軟體添加新個性,而且每一處新代碼的位置都是事Crowdsourced Security Testing道的。

  • 更好的代碼可維護性。 代碼結構可見和已知,那就更容易維護已有的軟體,所以也更容易找到 bug 和異常現象。

  • 更高的適應性。 軟體架構事先考慮到清晰的分離,那就更容易完成諸如換一個前端,添加商務規則引擎等新技術特性。

  • 宣揚不可知論。 最後,不過不是必然,軟體架構能使你根據你當前的結構看到行業裡大肆宣揚和時髦的東西,去適應這些大肆宣揚和時髦的東西。

軟體架構模式和風格用戶端/服務端 架構

用戶端/服務端 是由兩部分組成的軟體架構模型,通過電腦網路——或在同一台電腦上——相互連訊的用戶端系統和服務端系統。一個用戶端-服務端應用是由用戶端和服務端軟體組成的分布式系統。用戶端-服務端應用提供了一種分擔負載的好方法。用戶端進程總是啟動一個到服務端的串連,而服務端進程則總是等待來自任何用戶端的請求。用戶端-服務端架構有時也角度奧兩層架構。


基於組件的架構

基於組件的架構關注於設計的分解,即設計成單獨的功能性或邏輯性組件來表示定義明確、包含方法、事件與屬性的通訊介面。它提供了更高層次的抽象並將問題分解為與組件相關的子問題。

基於組件的架構的首要目的是確保組件的複用性。組件將一個軟體元素的功能與行為封裝到一個可重用的、獨立部署的可執行單元。

下面是用UML 2.0表示的兩個組件。負責處理使用者訂單的checkout組件需要通過CardProcessing組件從使用者的信用卡/借記卡中計費(即後者提供的功能)。

領域驅動設計

領域驅動設計(DDD)是建立滿足核心營運目標的高品質軟體的方法。它強調領域專家、開發人員、UX(使用者體驗)設計師及其他相關人員間的合作,以建立一個能反映業務需求的領域模型。這包括通用術語(也稱為通用語言)的協商、業務實體的指定及其行為與聯絡,並以一種能夠產生整潔且模組化的實現方法進行組織。

策略領域驅動設計模式及其間的關係


分層架構

分層架構專註於將應用程式中的相關功能組合到不同的層級中,層級間呈現出垂直層疊的結構。每一層中的功能都同一個通用和角色或者職責相關。層級間的通訊是明晰的,而且是松耦合的。將你的應用程式分出層級來非常有助於對關注點分離策略的支援,而這回頭就支援了靈活性和可維護性。

訊息匯流排架構

訊息匯流排架構描述了描述了一個使用軟體系統的原則,那就是能使用一個或者更多的通訊通道來接收和發送訊息,那樣應用程式無需知道每個通道的特定的細節就能實現互動。這是一種設計應用程式的風格,採用這種風格之後應用程式間的互動就由公用匯流排上訊息的傳遞來完成(這種傳遞經常是非同步) 。訊息匯流排架構最常用的實現不是使用的訊息路由,就是發布/訂閱模式,並且經常使用一個諸如訊息佇列這樣的訊息系統來實現。

N層/3層架構

N層/3層架構描述是將功能大致像分層風格的架構那樣分隔成幾段,而讓每一段都成為可以被放到一個物理上分離的電腦上的層。它們是通過面向組件的方法被發展而來的,一般通訊是用的特定於平台的方法,而不是基於訊息的方式。


物件導向的架構

物件導向的架構是一種基於責任分解的設計範式,即將系統分解為獨立可複用的對象,每個對象包含了與自身相關的資料與行為。物件導向設計將系統看作一系列相互協作的對象,而不是一組程式或處理指示。對象間相互分離、獨立且耦合鬆散;它們通過介面調用或處理其他對象內的屬性,並通過訊息的發送與接收在介面上進行通訊。

面向服務的架構(SOA)

面向服務的架構(SOA)是一種用於建立基於服務的使用的體繫結構的方法。服務(例如 RESTful Web service)實現了一些小的功能,如產生資料、驗證使用者或提供簡單的分析服務。

SOA 架構的關鍵是相互獨立且松耦合的服務間的互動。SOA 架構實現了服務的複用,因此在升級或需要做其他變動時不需要再從頭開始。


洋蔥架構

洋蔥架構是由 Jeffrey Palermo 提出的,它類似於 Alistair Cockburn 提出的六邊形架構(Hexagonal Architecture)。

該架構的提出最初是為了避免在 N 層架構中各層間的依賴關係。它通過將所有基礎服務(包括資料庫)移出問題域來實現。將此理論實施到 N 層架構意味著要將依賴流反轉,從而將商務邏輯獨立出來。

這個理論產生了一個新的模型,在這個模型中商務邏輯處於架構的中心,其他層圍繞在它周圍形成同心環,就像一個洋蔥一樣。

 
 
  原文地址:http://www.oschina.net/translate/introduction-to-software-architecture

軟體架構介紹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.