簡單聊聊系統結構

軟件開發都是從混沌到清晰的一個結構化抽象的過程。在動筆寫代碼之前,我們需要搞清楚幾個問題:

(1) 系統解決什麼問題?

(2) 系統如何與環境交互?

(3) 系統的流程如何組織?

(4) 系統需要支持的變化範圍是什麼?等等。

思考清楚了這些問題,我們就可以抽象出符合我們需求的系統結構。本篇就來聊聊常用的系統結構。

1. 分層結構

分層結構是目前應用最廣泛的軟件結構,在該結構中,各子系統按照層次的形式組織起來,上層通過接口調用(或其他契約方式)使用下層的服務,而下層對上層則一無所知。最典型的是三層結構,以及由三層結構衍生出來的多層結構。

分層結構的優點包括:

(1) 可以有效降低系統的耦合性,提高內聚性,降低系統複雜度;

(2) 良好的可擴展性,提供了一個靈活框架,實現業務邏輯的高效重用;

(3) 易於維護。

2. 交互型結構

交互型結構也是應用廣泛的軟件結構,該類結構可以很好地抽象組件之間的交互關係。常見的交互型結構有MVC(Model-View-Controller)、MVP(Model-View-Presenter)、MVVM(Model-View-ViewModel)等。

2.1 MVC

MVC是目前Web開發領域的主流架構風格。

MVC結構將應用程序分成是三個核心部分:模型、視圖、控制器。在該結構中,模型和視圖可以直接交互,也可以通過控制器將其轉換爲間接交互。間接交互更符合鬆耦合的設計思想。首先,控制器接收來自視圖的用戶請求,並決定調用哪個模型來處理,模型將業務處理完成後,將結果返回給控制器,控制器調用相應的視圖來格式化輸出數據,並由選定的視圖呈現給用戶。

Model層承載底層業務邏輯,該層越厚越好,因爲它是和界面最爲無關的部分,也是最容易跨平臺實現的部分。Model層實現越多的底層邏輯,Controller層就越簡潔,對跨平臺開發較爲有利。

View: 處理應用程序中界面呈現的部分。

Controller: 應用程序中處理用戶交互的部分。可以有很多個Controller,分別負責不同的用戶交互需求,這些Controller是可以被“正交分解”的,使得彼此完全沒有耦合關係。一個Controller模塊,可能包含一些屬於自己的輔助View,也會接受View層委託的一些事件,由事件驅動自己的狀態,最終通過調用Model層的接口來完成某項業務。

2.2 MVVM

View層要呈現Model層的數據,有可能需要知道Model層詳細的數據結構,這就要求Model層可能需要爲View層提供一些專享的只讀訪問接口,但在實際使用中,要保證這些接口不被擴散使用。

View層根據Model層數據繪製界面,看似很簡單,而實際上,在實際呈現的過程中,可能爲了提升效率,進行一些局部更新的優化。在局部更新的優化比較複雜時,就不得不在Model和View之間,額外引入一層ViewModel來達到這一目的。ViewModel是了View的界面呈現而設計的Model層,它的數據組織更接近於View層的表達,和View層的數據呈現一一對應的關係。

MVVM的結構如下:

2.3 MVP

MVP結構更加明確地規定了Model和View之間不能存在直接交互。Presenter作爲Model和View的協調器,確保二者之間的交互通過Presenter來進行。

在瞭解了以上幾種數據結構之後,在實際使用中,我們應該如何選擇系統結構呢?兩條重要的規則是:

(1) 最低耦合原則:即不同的子系統或模塊之間有最少的交互頻率,使用簡潔而自然的接口進行數據交互;

(2) 單一職責原則:一個子系統或模塊只幹一件事情。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章