# 企業系統的 N-Tier 架構設計
在企業內部使用的 ERP/CRM/HRM 系統開發中,採用 **N-Tier 多層式架構** 是常見且有效的方法,可達到清楚的職責分離、良好的模組化與系統延展性。本文介紹一套適用於這類型系統的五層式架構,並說明各層的角色與特色。
## N-Tier 架構五大分層
| 分層名稱 | 英文名稱 | 說明 |
|----------------|----------------------------|------|
| **表現層** | Presentation Layer | 提供使用者介面(UI),如 WinForm、Web UI、APP UI。 |
| **API 呼叫層** | API Connector Layer | 封裝 API 呼叫邏輯,支援序列化、加密、壓縮等處理,是用戶端的對外接口。 |
| **API 服務層** | API Service Layer | 提供統一的 API 接口給外部系統存取,支援授權驗證與參數處理。 |
| **業務邏輯層** | Business Logic Layer (BLL) | 負責處理系統內部的業務邏輯與流程控制,核心元件為 BusinessObject。 |
| **資料存取層** | Data Access Layer (DAL) | 存取資料庫的封裝層,透過 DbAccess 管理資料查詢與異動。 |
### 📌 架構流程圖:
```mermaid
flowchart TD
A[Presentation Layer]
B[API Connector Layer]
C[API Service Layer]
D[Business Logic Layer]
E[Data Access Layer]
F1[近端呼叫 In-Process]
F2[遠端呼叫 JSON-RPC]
A --> B
B --> F1
B --> F2
F1 --> C
F2 --> C
C --> D
D --> E
```
---
## 各層詳細特色與實務應用
### 1. 表現層(Presentation Layer)
- 主要面向 **企業內部使用者**,使用者為具備流程知識的員工。
- UI 設計標準化、制式化,操作流程一致,降低學習門檻。
- 採用 `FormLayout.xml` 動態描述表單欄位與行為,支援 WinForm/Web/APP 三種前端自動化生成。
- 易於根據表單描述進行客製化調整,而不需變動程式碼。
### 2. API 呼叫層(API Connector Layer)
- 封裝用戶端與後端溝通的細節,使開發者專注於業務邏輯。
- 支援 **近端與遠端呼叫切換**:開發時使用近端 (方便除錯)、部署時使用遠端 (正式運行)。
- 傳遞資料提供序列化、加密與壓縮功能,提升通訊效能與安全性。
- 實現客戶端統一的 API 呼叫邏輯,減少重複開發。
### 3. API 服務層(API Service Layer)
- 提供通用、統一的對外 API 接口,是 **後端系統的對外門面**。
- 支援權限驗證、參數解析、例外處理等共通服務。
- 接收兩種資料格式:
- **JSON 格式**:開放給第三方系統整合。
- **編碼格式(序列化/加密/壓縮)**:供內部前端使用,效能更佳。
- 開發新功能時,只需關注業務邏輯的實作,不必重複處理 API 基礎架構。
### 4. 業務邏輯層(Business Logic Layer, BLL)
- 系統的核心層,涵蓋所有企業內部運作邏輯,如:
- 庫存控管
- 採購配貨
- 成本計算
- 每個功能對應一個 `BusinessObject`,統一處理資料與行為:
- 不論是 Web、APP 或 WinForm 前端,均連結至同一業務邏輯元件。
- 第三方 API 接口亦呼叫同一業務物件,**確保邏輯一致性與維護便利性**。
- 支援 **業務邏輯客製化**:
- 開發人員可繼承原始 `BusinessObject`,只覆寫需要調整的方法。
- 例如覆寫 `DoBeforeSave` 方法,自訂存檔前的驗證邏輯。
- 或覆寫 `DoAfterSave` 方法,調整存檔後的過帳或通知行為。
- 避免整段重寫,提高可維護性與擴充彈性。
### 5. 資料存取層(Data Access Layer, DAL)
- 封裝所有與資料庫互動的細節:
- 不直接暴露 Connection String,僅需指定 `DatabaseID`。
- 採用自研 ORM 架構 **XORM**:
- 管理資料表結構與 CRUD 產生。
- 利用 `DbTable.xml` 定義資料結構,支援跨資料庫類型(SQL Server、MySQL 等)。
- 表單定義透過 `FormDefine.xml` 管理欄位與行為設定。
- 各表單(如員工、部門)有獨立的定義。
- 表單之間的關聯性由定義檔決定,**避免直接耦合資料表結構**。
---
## 結語
透過上述 N-Tier 五層架構,企業系統可實現以下效益:
- **模組化維護**:職責分離,各層邏輯清晰。
- **彈性延伸**:新增功能僅需擴充對應層級,不影響整體架構。
- **統一開發模式**:降低人員訓練成本與開發錯誤。
- **高可維護性與重用性**:尤其在業務邏輯與 API 架構上效益顯著。
此種架構已成功應用於 ERP/HRM 系統中,證實其可擴充性與長期維運的可行性。
---