談軟件架構就不得不說說五視圖方法論。
一、多階段還是多視圖
軟件架構設計是多視圖的,也是多階段的,首先是多階段的。
先左后做——這叫階段,齊頭并進——這叫視圖。
二、軟件架構設計的5視圖
根據關注角度的不同,軟件架構又分為邏輯架構、開發架構、運行架構、數據架構和物理架構。
邏輯架構:著重考慮功能需求,系統應當向用戶提供什么樣的服務,關注點主要是行為或職責的劃分。邏輯架構關注的功能,不僅包括用戶可見的功能,還應當包括為實現用戶功能而必須提供的輔助功能。邏輯架構更偏向我們所說的"分層",像經典的"三層架構"。邏輯架構的靜態方面是抽象職責的劃分,動態方面是承擔不同職責的邏輯單元之間的交互與協作關系。
開發架構:著重考慮開發期間的質量屬性,關注點是在軟件開發環境中軟件模塊(包)的實際組織方式,具體涉及源程序文件、配置文件、源程序包、編譯打包后的目標文件,還包括應用程序依賴的SDK、三方庫、中間件以及開發的系統將運行于其上的系統軟件和邏輯架構有緊密的關聯。
運行架構:著重考慮軟件運行期間的質量屬性,關注點是系統的并發、同步、通信等問題,這勢必涉及到進程、線程、對象等運行時概念。運行架構的靜態方面關注軟件系統運行時的單元結構,動態方面關注運行時單元之間的交互機制。例如比較常見的"線程同步"問題、死鎖問題、對象的生命周期問題等。
物理架構:重考慮安裝和部署需求,主要關注軟件運行的系統、網絡、服務器等基礎設施以及如何通過服務器部署和配置網絡環境,來實現應用程序的可伸縮性、高可用性等。
數據架構:著重考慮數據需求,關注點是持久化數據的存儲方案,不僅包括實體及實體關系數據存儲格式,還可能包括數據傳遞、數據復制、數據同步等策略問題。如何選擇關系型數據庫、NOSQL,如何保障數據存儲層面的性能、高可用性、災備。
前三種視圖,可以歸納為軟件架構,而后兩種架構,則歸為系統架構。