先講結論:
- Clojure 的哲學不是反對架構,而是反對不必要的複雜與重抽象(over-abstraction)。
- 《PEAA》雖出自 OO 世界,但它提供的「複雜系統常見問題的分類」仍然對理解大型應用程式的設計具有參考價值。
Clojure vs. PEAA 架構觀點對照表
主題 / 架構關注點 | PEAA 傳統作法 | Clojure 社群作法 / 思想 | 備註 |
---|---|---|---|
Domain Logic 組織 | Transaction Script / Domain Model / Table Module | 純函數 + maps,無需複雜分層 | 接近 Transaction Script,但更 composable |
資料模型與 ORM | Active Record / Data Mapper | next.jdbc / HoneySQL / raw SQL;避免 ORM | 強調透明性與控制性 |
Service Layer | 明確定義 Service Layer,封裝業務操作邏輯 | 命名空間中函數直接代表 service | 無需額外「層」,只要邏輯清楚 |
DTO(資料轉換物件) | DTO 是必要的封裝傳輸結構 | map 本身即為資料;轉換靠函數實作 | 不封裝資料、讓轉換明確 |
Repository pattern | 一層介面抽象資料來源(e.g., JPA repository) | 直接使用 SQL/DSL;必要時以 protocol 封裝 | 避免過早抽象 |
Remote Facade | 使用 RPC façade 抽象網路通訊 | REST/HTTP handler + 資料直接輸出 | 保持資料透明,不抽象「行為」 |
物件導向封裝邏輯 | 封裝狀態與邏輯於物件中 | 分離資料(immutable maps)與邏輯(純函數) | 關注點分離;更易測試與理解 |
狀態管理 | 對象內部維護 mutable 狀態 | 使用 immutable 資料結構,顯式傳遞狀態 | 更容易 debug 與回溯 |
分層架構(Layered Architecture) | UI → Application → Domain → Data Source | 依邏輯功能拆命名空間;非硬性分層 | 分層更彈性、依實際需求決定 |
策略心態 | 複雜可藉由模式控制 | 複雜性應避免;decoupling > pattern | 核心哲學差異所在 |
You must log in or register to comment.