一、框架與函式庫的關係
程式框架(Framework)是一種為特定類型應用程式所設計的整體開發骨架。
它不只提供工具與函式,更包含應用架構、開發流程、設計規範與生命週期管理,讓開發者不必從零開始設計整個系統。
在使用框架時,開發者需要遵循框架既定的結構與規則,只需在指定的位置填入業務邏輯與功能實作,即可快速建立一個結構清楚、可維護性高的應用程式。
你可以把框架想像成「已經完成鋼筋結構與管線配置的房屋骨架」:
房間配置、水電位置都已規劃完成,開發者只需要在裡面進行裝潢與擺設家具。
相對地,函式庫(Library)或類別庫(Class Library),是一組可重複使用的程式碼集合,專注於解決「某一類特定問題」,例如資料處理、日期時間、HTTP 請求或 UI 元件等。
開發者可以在任何需要的地方主動呼叫函式庫的功能,函式庫本身不會限制整個應用程式的結構,也不會主導程式流程。
它可以被框架整合使用,也可以在沒有框架的專案中獨立存在。
🔧 框架與函式庫最核心的差異,在於「控制權」與「應用範圍」
Library(函式庫):
由開發者決定「何時、在哪裡、如何呼叫」,程式流程掌握在你手中。
Framework(框架):
由框架本身控制整體流程,你的程式碼只是被「掛進去」的其中一部分,
這種設計稱為 控制反轉(Inversion of Control, IoC) —— 是框架在呼叫你,而不是你在呼叫框架。
二、函式庫 (Library)
定義
函式庫是一組封裝良好的函式、類別或模組,用來提供某一項或某一類功能,例如數學運算、資料處理、UI 操作等。
控制權
控制權在開發者手上。
你可以選擇使用它、何時使用它,甚至完全不用它,而不影響整體程式架構。
比喻
💡 就像一個「工具箱」。
你可以依需求拿出扳手、螺絲起子或電鑽,但怎麼組裝、流程如何,完全由你決定。
常見例子
* jQuery:DOM 操作與事件處理
* React:用於建立使用者介面的 UI 函式庫
* Lodash:JavaScript 工具函式集合
* Axios:HTTP 請求工具
三、框架 (Framework)
定義
框架是一套完整的軟體開發基礎結構,通常包含:
* 系統架構設計(如 MVC、MVVM)
* 內建函式庫與工具
* 明確的開發規範與目錄結構
* 應用程式生命週期管理
它的目標是:讓開發者專注在「業務邏輯」,而不是重複造輪子。
控制權
框架擁有控制權 (控制反轉 Inversion of Control)。在框架中,整個程式的執行流程由框架主導。
框架會在適當的時機呼叫你所撰寫的程式碼(Controller、Component、Hook…),而不是反過來。
比喻
💡 工廠生產線
你必須在工廠既定的流程與規格下工作,水電產線都已經安排好,最終產出成品。
開發者只負責特定工序,最終由工廠產出成品。
💡 車架/房屋骨架
汽車結構、門窗、引擎都已設計完成,開發者只需在骨架內填入功能與細節,就能完成系統。
就像建設完成房子骨架後,在內部填寫裝潢。
常見例子
* Angular:大型前端框架,規範完整
* Vue.js:漸進式前端框架
* Next.js:基於 React 的全端框架(全棧框架)
* Nuxt.js:基於 Vue.js 的前端框架
* Nest.js:基於 Node.js 的後端框架
* Express.js:基於 Node.js 的後端框架
* Ruby on Rails:Ruby 後端框架
* Django:Python 後端框架
* Spring Boot:Java 生態系主流後端框架
四、總結比較
簡而言之,
函式庫是「你呼叫它」
框架是「它呼叫你」
🔧 框架通常內含多個函式庫,但函式庫本身不會限制你的系統架構。
| 特性 | 函式庫(Library) | 框架(Framework) |
| 控制流程 | 你掌控流程 | 框架掌控流程(IoC) |
| 使用方式 | 呼叫庫函式 | 把程式掛到框架生命週期 |
| 規範程度 | 較自由彈性 | 規範性強,需遵守架構 |
| 組件粒度 | 單一功能 | 提供整套架構與工具 |
| 可替換性 | 易於替換 | 整體性較高,需要一致性 |