Layer 和Tier都是層,但是他們所表現的含義不同,Tier指的是軟件系統中物理上的軟件和硬件,具體指部署在某服務器上,而Layer(邏輯層)指軟件系統中完成特定功能的邏輯模塊,邏輯概念。
Layer是邏輯上 組織代碼的形式。比如邏輯分層中表現層,服務層,業務層,領域層,他們是軟件功能來划分的。並不指代部署在那台具體的服務器上或者,物理位置。
Tier這指代碼運行部署的具體位置,是一個物理層次上的划為,Tier就是指邏輯層Layer具體的運行位置。所以邏輯層可以部署或者遷移在不同物理層,一個物理層可以部署運行多個邏輯層。
從Layer和Tier就會延伸到邏輯架構和物理架構。我們一個邏輯分層(N-Layer)的部署運行環境可以在一台或者是多台服務器,由於物理環境的多樣性,邏輯層次的部署也具有多樣性。這就需要我們必須了解物理架構和邏輯架構。
大多數情況下我們所說的N層應用系統指的是物理模型,具體模塊的分布物理位置。客戶端,服務層,邏輯層,數據庫服務器,與我們的邏輯模型之間並不是一對一的關系。邏輯上的分層架構與物理位置上的服務器數量和網絡邊界多少無關,邏輯架構層次只與我們的功能划分相關,是按照功能划分。經典的3-Layer架構:表現層,業務層,數據訪問層,他們可能運行在同一物理位置上。也可以是3台計算機上,這並不是邏輯架構所關注的。邏輯層次和物理分層數量關系為:邏輯層數必須不小於物理層數,因為一個物理層可以部署一個或者多個邏輯層次,邏輯層次只能遷移在不同的物理環境。
邏輯層次的架構能幫助我們解決邏輯耦合,達到靈活配置,遷移。
一個良好的邏輯分層可以帶來:
- 邏輯組織代碼
- 易於維護
- 代碼更好的重用
- 更好的團隊開發體驗
- 代碼邏輯的清晰度
一個良好的物理架構可以帶來:
- 性能的提升
- 可伸縮性
- 容錯性
- 安全性
邏輯層次越多會影響程序運行的性能,但代碼層次的低耦合,松散化,是需要架構師的權衡的,我覺得一般應用程序的瓶頸並不在這里。