天天看點

軟體架構

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

因為相信,是以看見.

繼續閱讀