随着軟體行業的發展,軟體的規模越來越大,“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)
(全文完)