編程即設計,代碼即架構。程序員
###概述###編程
架構,這個詞比較神祕,以至於不少程序員望而卻步,覺得要什麼了不起的本事。架構
架構的目標是什麼呢?代碼,實現所需服務;架構,致力於以更小成本、更高質量地實現所需服務。架構,是兼顧質量與成本的魔法。 但架構並不研究如何實現具體服務,—— 它研究的是如何妥善安置那些實現服務的構件,管理依賴、邊界和變化。測試
-
如何將不變從變化中分離出來,沉澱爲穩定的組件 ?如何管理組件之間的依賴 ?插件
-
如何識別組件所在的邊界和上下文? 如何管理各類邊界和上下文 ?架構設計
-
如何讓變化更容易顯露和識別 ? 如何管理多維度的變化 ?設計
-
如何讓業務邏輯變成可配置的易變動的插件 ?開發
<br/>class
###目標###擴展
小問題小設計,大問題大架構。架構聽上去高大上,實際上也是爲了解決問題的。不過,架構與程序不一樣,是在不一樣層次上求解問題。
架構設計是宏觀性考量,在總體上理解問題的複雜性,給出方案,並論證方案的可行性,提供一系列準則指導執行。缺少架構設計而直接着手處理問題,會出現三個嚴重問題:
-
在遇到實質性難題時,會束手無策或反覆折騰,一次次返工,耗費大量的人力和成本;
-
缺少質量的考量,上線後發現沒法知足用戶的須要;
-
缺少總體的考慮,在業務發展的時候,原有實現不具擴展性,沒法敏捷地支持中期和長遠目標。
<br/>
所以,架構的目標主要有三個:
-
提早識別問題的複雜性和關注點,提供可行的通過論證的解決方案;
-
創建服務質量指標,肯定設計方案能夠知足指定的質量指標;
-
規劃總體設計,提供長遠的可擴展性。
<br/>
要實現架構目標,先要問:要解決的問題是什麼?問題的複雜性在哪裏?弄清楚目標和靶點,才能一擊命中。
<br/>
###衡量###
一個好的架構設計,它起什麼做用呢?
-
是否是有針對性地解決了問題固有的複雜性? 經過提供漸進穩定的領域模型,讓問題理解、描述和求解都更清晰天然了;
-
是否是令需求更快地實現,大幅下降了開發成本? 好比原來要花時間修改代碼、測試、發佈系統,後續只要新增配置,測試並刷新配置就搞定了;原來須要5人日,如今只須要 2人時;
-
是否是讓系統的依賴更清晰了?好比原來你調我我調你,亂成一團,如今可以清晰地看到數據流在各個模塊的流通和流向、脈絡;
-
是否是更穩定了?好比原來磕磕碰碰,作百次操做就有一次失敗,如今作十萬次操做纔有一次失敗;
-
是否是更容易操做了?好比原來須要ABCDE五步操做,如今一鍵無憂完成;
-
是否是足夠有彈性和靈活性,能夠支撐數年的業務發展? 好比原來遇到新業務就要作許多兼容,如今只要配置一些規則、流程就能適應新業務的發展。對新增開放,對修改關閉。
<br/>
綜上所述,架構設計至少有幾個方面能夠衡量:
-
識別出問題的關鍵複雜性,創建穩定有效的領域模型。
-
大幅下降開發與維護成本。 能夠落定到人力與時間。
-
系統脈絡更清晰。能夠繪製出系統模塊的依賴圖,經過依賴圖的節點與節點連接數量來判斷。
-
更穩定。操做失敗、出現各類問題的比率。
-
更容易操做。 操做的步驟數 乘以 操做失敗的比率。
-
彈性和靈活性。 支持新業務的難度,以新增代碼量和修改代碼量來衡量。
<br/>