軟體架構:5種你應該知道的模式
Singleton(單例模式)、倉儲模式(repository)、工廠模式(factory)、建造者模式(builder)、裝飾模式(decorator)……大概每個上課聽講的程式員都不會陌生——軟體的設計模式為我們提供了針對現有的、重複出現的問題以可靠的解決方案。
在軟體架構方面同樣存在類似的機制,通用的、可重用的解決方案在給定上下文中的軟體體系結構中經常出現的問題。不同的軟體架構模式各有千秋,以下是目前較為主流的5種軟體架構模式。
分層模式(Layered Pattern)
分層模式大概是最知名的軟體架構模式之一,有大量的開發者使用,但並不知道它的名字。分層模式將程式碼拆分為“層”,每個層都有一定的責任,併為更高“層”服務。
分層模式並沒有規定層的數量,但通常會有以下結構:
- 表現層 / UI層
- 應用層
- 業務/域(domain)層
- 持久/資料訪問層
- 資料庫層
分層模式的想法是使用者通過執行某些動作(例如點選按鈕)在表現層啟動一段程式碼。隨後,表現層呼叫應用層、進入業務層,最後持久層將所有內容儲存在資料庫中。簡單來說,分層模式中的高層呼叫並依賴低層。

根據應用複雜程度,我們會看到很多相應的變體。例如某些應用會省略應用層,而某些應用會新增快取層,甚至會出現兩層合一的情況。
層責任
如上所述,每層有每層的責任。表現層包含應用的圖形設計和處理互動的程式碼。理論上來講,我們不應該在這一層新增任何與user interface無關的邏輯。
業務層是放置特定業務問題模型和邏輯的地方。
應用層位於業務層和和表現層之間。一方面為表現層提供業務層抽象,另一方面為應用層提供放置某些不適合放置於業務層或表現層的某些協調邏輯。
持久層包含訪問資料庫層的程式碼,而資料庫層是底層資料庫技術,例如SQL Server、MongoDB。持久層是用於操作資料庫的程式碼集:SQL語句、連線詳情等。
優勢
- 大多數開發者都很熟悉
- 一種用於編寫組織良好並且可測試應用的簡單方法
劣勢
- 分層模式往往會導致應用的“一體化”並使之變得難以拆分
- 開發者往往會發現自己編寫了大量的程式碼來傳遞不同的層,而沒有在這些層裡新增任何值。如果我們做的只是編寫一個簡單的CRUD應用,分層模式可能有點過分了。
適用於
- 標準的、不僅僅用於完成CRUD操作的業務線(line-of-business)應用
微核心模式(Microkernel)
當應用程式有一組核心職責和一組可互換的部件時,微核心模式(或外掛模式)非常有用。微核心將提供應用程式的入口點和一般流程,而不需要真正瞭解不同的外掛在做什麼。

例如任務排程,微核心可以包含所有的排程和觸發邏輯,而外掛負責特定的任務。只要外掛遵循特定的API,微核心就可以出發它們,而不需要了解實現的細節。
另一個例子是工作流。工作流的實現包含諸如不同步驟的順序、評估步驟的結果、決定下一步的內容等概念,步驟的的具體實現對於工作流的核心程式碼並不重要。
優勢
- 靈活性