随着軟體行業的發展,軟體的規模越來越大,“software architecture軟體架構”這個名詞開始頻繁出現。“軟體架構”究竟指的是什麼?
廣義的“軟體架構”針對整個軟體系統,當然包括“軟體系統”的全部内容,同時包括網絡、計算機,外部裝置等實體節點,以及開發者,維護者和客戶等人員。
狹義的“軟體架構”指的是軟體開發過程中,軟體頂層架構的設計。
本文讨論的是狹義的軟體架構,主要包括三方面的内容:
架構模式:頂層模型的設計方法
設計模式:架構類結構的設計方法
架構設計目标:非功能性的限制
eric evans在《領域驅動設計-軟體核心複雜性應對之道》這本書中提出了傳統的ddd四層架構模式。
六邊形架構是alistair cockburn在2005年提出的,解決了傳統的分層架構所帶來的問題。vaughn vernon 在《實作領域驅動設計》一書中,作者将六邊形架構應用到領域驅動設計的實作。将傳統的分層架構變成了内部和外部,内部實作領域模型,外部實作擴充卡。
jeffrey palermo在2008年提出了洋蔥架構。它是從六邊形架構發展而來,将六邊形改為圓環,層層依賴。
robert c. martin在2012年提出了幹淨架構(clean architecture),這是六邊形架構的一個變體。
dci代表data, context, interaction。ames o. coplien和trygve reenskaug在2009年發表了一篇論文《dci架構:面向對象程式設計的新構想》
重點是關注資料的不同場景的互動行為, 核心思想是将面向對象系統的資料模型和動态的行為模型區分開來,用不同的對象複用同一段互動行為。
架構模式很難被具體化、架構化,因為它們太過抽象,隻是若幹設計原則,這樣的架構即使被設計出來,也難以流行起來。
相對于抽象的架構模式,架構類設計模式還是很流行的。最流行的當然是mvc架構模式。
mvc即模型(model)、視圖(view)、控制器(controller)設計模式可謂是無人不知不人不曉。它的缺點是比較重,各部分沒有解耦。
model-view-presenter設計模式是在mvc基礎上發展而來,将模型與視圖完全分離,可以修改視圖而不影響模型。
model-view-viewmodel設計模式是mvp的進一步改進,使用雙向綁定将view與viewmodel的資料傳輸自動化。
viper模式最初是在2013年由jeff gilbert 和 conrad stoll 提出,随後在《architecting ios apps with viper》文中做了詳細的介紹。
由view+interactor+presenter+entity+routing組成,是clean architecture的一種實作模式。
軟體架構設計最大的困難與問題在于,架構模式過于抽象,很難有具體的架構支撐,很難重用代碼;設計模式可以有具體的架構類支援,不進行架構設計,直接使用架構是可以的,但是很難支撐複雜系統的高層架構。
是以,對于軟體架構設計最有意義的事情,就是把抽象和具體連接配接起來,既是抽象的模式,同時又是具體的可重用架構。
結合具體的項目過程,我設計了一個模式,同時也實作了一個架構。
這個模式,命名為bricks architecture(磚塊架構)。
這個架構,命名為bricks(離别鈎),出自《七種武器》:“你用離别鈎,隻不過為了要相聚”。
bricks是一個完全子產品化的模式,主要有六種子產品:builder+router+interactor+context+brick+scenario。
bricks architecture既是clean architecture的一種變體,同時也是clean architecture的一種實作模式。
brick對應于entities
context對應于usecases
adapter對應于adapters
bricks architecture既是dci的一種變體,同時也是dci的一種實作模式。
brick對應于data
context對應于context
adapter+interactor對應于interaction
builder可以實作為generator,生成mvp架構的代碼,如果使用雙向綁定如vue,那麼将生成mvvm架構的代碼
builder也可以實作為controler,加載手寫代碼,可以視為mvc架構的代碼。
model是由builder根據brick(entity)生成
view是由builder根據context + scenario生成
presenter是由builder據context + scenario+ brick生成
那麼bricks模式,在生成後變成viper,在代碼生成後,實際代碼是基于viper模式的。
(builder+context+scenario)+ interactor + brick + router
view + interactor + presenter + entity + router
代碼生成,在成熟平台如web,可以完全應用,bricks架構可以建構lowcode低代碼平台。生成的代碼可以應用mvc,mvp,mvvm模式。
在代碼生成不成熟的平台,如手機平台,可以部分應用或不使用,bricks架構可以應用viper,clean architecture等複雜的模式。
動态選擇架構模式可以避免過度設計。
由于bricks是完全子產品化的模式,在可定制化等方面有着天然的優勢。
可定制化(customizable)
可伸縮性(scalable)
可維護性(maintainable)
可擴充性(extensible)
在安全性、可靠性方面,雖然整體強度是降價的,但是子產品本身能夠被複用,被測試,子產品的品質是上升的,是以整體還是可靠的。
安全性(secure)
可靠性(reliable)
由于在複用性(dci模式的應用)、可擴充性(子產品化)的優勢,界面的一緻性很高,開發快速,性能雖然有可能受影響,但體驗還是優秀的。
市場時機(time to market)
客戶體驗(customer experience)
因為相信,是以看見.