做者:莫那魯道原文:http://thinkinjava.cn/2019/04/13/2019-04-13-architecture/
「你對架構這個詞怎麼理解?」javascript
emm …..java
實際上,軟件架構分紅 2 派。微信
1 軟件架構的派別
組成派
組成派的定義很是簡潔。
定義:軟件系統的架構將系統描述爲計算組件及組件之間的交互。架構
剖析定義:
a. 該架構關注架構實踐中的客體——軟件,以軟件自己爲描述對象。
b. 分析了軟件的組成,即軟件由承擔不一樣任務的組件組成,這些組件經過相關交互,完成更高層次的計算。性能
決策派
決策派的定義相對於組成派的定義,要繁雜不少。但核心思想很是明確:軟件架構是在一些重要方面所作出的決策的集合。spa
定義(軟件架構包含了關於如下問題的重要決策):.net
軟件系統的組織架構設計
選擇成爲系統的結構元素和他們之間的接口,以及當這些元素相互協做時所體現的行爲。設計
如何組合這些元素,使他們逐漸合併成更大的子系統。code
用於指導這個系統的架構風格:這些元素以及它們的接口、協做和組合。
軟件架構並不單單注重軟件自己的結構和行爲,還注重其餘特性:使用、功能性、性能、彈性、重用、可理解性、經濟和技術的限制及權衡,以及美學等。
2 組成派、決策派 概念解析
組成派:
架構設計是分與合的藝術。
架構 = 組件 + 交互。
咱們舉例 MVC 架構:
V 建立 C,C 根據用戶交互調用 M 的相關服務,而 M 將自身的改變通知 V,V 經過交互讀取 M 的信息以更新自身。
決策派
架構屬於設計,但設計不必定屬於架構。架構設計的決策,將對總體質量、並行開發、適應變化等方面有着重大影響,例如:
模塊如何劃分
每一個模塊的職責如何
每一個模塊的接口如何定義
模塊間採用何種交互機制
開發技術如何選型
如何知足約束和質量屬性的需求
如何適應可能發生的變化
這裏假設咱們設計一個 C/S 系統,會有一個決策樹:
決定採用 C/S 架構,包含 Client 和 Server
決定將 Server 分紅 3 層
決定將 Server 的引擎層劃分紅 N 個模塊
決定 …..
能夠看出,決策,就是一步步遞歸,將大任務,經過一個個合理的決策,劃分紅一個個小任務。是否是相似 fork join 呢?
另外,從上面也能夠看出,不是隻有大系統纔有架構,小的模塊,小的系統也有架構。所以,在平時編寫代碼時,即便本身負責的系統很小,也要關心,設計好他的架構。
總結
不管是組成派,仍是決策派,在架構設計中,咱們都會涉及,只是站的角度不一樣罷了,前者站在軟件的角度,後者站在決策人的角度。
例如:
當咱們決定對模塊如何進行劃分的時候,這個時候,是決策派。
當咱們設計模塊邊界的時候,是組成派。
當咱們對模塊之間的交互接口進行設計的時候,就是組成派。
當咱們考慮易用性,代碼美學,靈活性的時候,是決策派。
……
最後,管他什麼派,只是角度不一樣罷了,好的架構,我認爲是這樣的:模塊邊界清晰,依賴合理,彈性靈活,性能優越,易於理解。
參考
軟件架構設計——溫昱
本文分享自微信公衆號 - 碼農沉思錄(code-thinker)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。