Hero Image
[架構] 多層式架構(Multi-layer Architecture)

中文多層架構的層可翻作 layer 或 tier,兩者主要的差別在於 layer 指程式邏輯在應用程式的位置;而 tier 指 layer 在系統上實際部屬執行的位址,屬於物理層級的指涉。這一篇的層說的是 layer,談如何在軟體層面利用分層 (layer) 妥善安排程式碼,以 multi-layer 撰寫程式碼能將複雜的邏輯隔離開達成關注點分離(SoC, Separation of concerns),好處有: 降低耦合:程式拆成各司其職的單元,降低彼此耦合,增加程式單元彈性(擴展性)、複用性。 易於維護:多層式架構中程式碼各司其職,容易定位問題發生點、而非從整個應用程式邏輯找。 敏捷開發:程式可快速回應需求修改(理由與易於維護類似,但是在開發時獲得的好處)。 平行開發:解耦的程式有助於降低協作併版衝突。 分層 三層式架構 一般來說最常用的三層式架構組成為: 表現層 (PL; Presentation Layer):ASP 內就是 Controller 結尾。 商業邏輯繩 (BLL; Business Logic Layer):又稱為 Service Layer,命名習慣是 Service、Helper 結尾。 資料存取層(DAL; Data Access Layer):命名習慣是 Repo 結尾。 另外有人將 Domain、Common 稱為一層,但這個部分其實不太像層,因為會被每一層引用,在架構上呈現比較不像層那樣扁平,裡面包含: Model、Entity、DTO(Data transfer object) 或 Value Object,這裡只有屬性沒有方法。 四層式架構 為了降低 PL 與 BL 之間的耦合,有時會在 Business Logic Layer(BLL) 上再疊一層 Service Layer(SL),作為 Presentation Layer 與 Business Layer 的中介層,這時 Business Logic Layer 的命名就不以 Serviece 結尾,通常較大型專案才需要如此分法。

Hero Image
[架構] 多層式架構(Multitier Architecture)

多層式架構 Multitier Architecture 或稱 N-Tier Architecture, 是 Client–server architecture 的一種, 多層架構的層可以是 layer 或 tier,這兩者之間主要的差別在於 layer 指程式邏輯在應用程式的位置; 而 tier 指 layer 在系統上實際部屬執行的位址,屬於物理層級的指涉。 這一篇的層指的是 tier。 N-tier model N-tier model,層與層之間的邊界有 N-1 個,而程式跨邊界會造成巨大的效能損失, 一說為光是跨越同一台機器上不同進程(process)邊界存取資源損失就大約1000倍, 如果透過網路進行遠端呼叫勢必損失更多, 因此每跨越一個邊界進行資源存取效能就會以幾何級數損失。 且增加邊界在軟體設計上會增加複雜度,簡單的應用程式使用多層式架構很容易造成過度設計(over design), 因此如何適當添加層級(tier)也是一門學問,添加層級時必需考量如何在應用程式所部屬的環境獲取最大的成本效益。 軟體是否採用多層式架構必須以多層式架構的優缺點進行取捨(尤其是可擴展性與效能之間)。 提高可擴展性(scalability)。 提高效能(performance)。 提高容錯率(fault tolerance)。 提高安全性(security)。 1-tier model 所有的 layer 都在同一機器、同一記憶體空間內運行,因此不需考慮網路造成的性能損失。 2-tier model layer 分配至兩個不同的記憶體空間運行,記憶體空間可能位於相同或兩台不同的機器上(通常是不同機器),典型的例子是分配到 client、server 上運行。 3-tier model 多層式架構當中最常使用的就是三層架構(three-tier architecture)。 三層架構與Web應用程式來說明如下: 表現層(Presentation):又稱為 UI 層,以Web來說就是呈現出來的前端網頁。 應用程式層(Application):以 Web 來說相當於伺服器上執行的應用程式。 資料層(Data):這一層包含資料儲存、呈現機制,以 Web 來說通常指 Database。 Reference wikipedia - Multitier architecture Rockford Lhotka - Should all apps be n-tier?