框架(Framework)是程式設計中提供完整應用程式骨架與工作流程的軟體平台,預先定義架構規範、元件與控制流程,讓開發者填入業務邏輯即可快速建構應用。它就像建築藍圖與鷹架,規定「怎麼做」而非「做什麼」,與函式庫的「被呼叫」關係相反,框架主動「呼叫你的程式碼」,大幅提升開發效率與一致性。
框架與函式庫的核心區別
「控制反轉」(Inversion of Control,IoC)是框架的精髓:
-
函式庫:你呼叫庫中的函式,控制流程在你手中。
-
框架:框架呼叫你的程式碼(如回調函式、控制器),你遵循其流程。
範例比喻:用 requests.get() 查 API 是函式庫;用 Express 路由處理請求是框架。
框架的典型組成元件
完整框架包含多層架構:
-
路由系統:映射 URL 到處理函式(如
/users/:id) -
模板引擎:動態生成 HTML(如 Jinja2、Pug)
-
ORM/ODM:資料庫抽象(如 SQLAlchemy、Mongoose)
-
中介軟體:請求處理管道(如認證、記錄)
-
CLI 工具:專案生成、遷移管理
-
內建伺服器:開發時快速啟動
MVC 架構模式
多數 Web 框架採用 MVC(Model-View-Controller)分離關注:
-
Model:資料模型與業務邏輯
-
View:使用者介面呈現
-
Controller:處理請求、協調 Model/View
text
請求 → Controller → Model (資料) → View (渲染) → 回應
主流框架生態比較
| 語言 | 框架範例 | 特色 | 學習曲線 |
|---|---|---|---|
| JavaScript | Express | 輕量、中介軟體 | 低 |
| React | 組件化 UI | 中 | |
| Next.js | 全端渲染 | 中高 | |
| Python | Flask | 微框架、靈活 | 低 |
| Django | 全功能、ORM | 中 | |
| Java | Spring Boot | 企業級、依賴注入 | 高 |
| Ruby | Rails | 慣例優先 | 中 |
實際開發流程範例
Express.js 快速啟動:
npm init -y && npm i express
const express = require('express')
const app = express() // 框架實例
app.get('/users/:id', (req, res) => { // 框架呼叫你的路由
res.json({ id: req.params.id })
})
app.listen(3000) // 框架啟動伺服器
Django 專案結構:
mysite/
├── manage.py # CLI 工具
├── settings.py # 配置中心
├── urls.py # 路由總表
└── app/
├── models.py # ORM 模型
├── views.py # 控制器
└── templates/ # HTML 模板
框架的優點與限制
優點:
-
開發加速:內建最佳實務與樣板
-
一致架構:團隊協作標準化
-
生態完整:豐富插件與文件
-
安全性:內建 CSRF、SQL 注入防護
限制:
-
學習曲線:需理解框架哲學
-
客製限制:「框架的框架」難改流程
-
效能開銷:相較原生程式碼較重
-
版本依賴:升級需適配變更
全端與微框架趨勢
-
全端框架:Next.js、Nuxt.js、Remix,一次處理前後端
-
微框架:FastAPI、Rocket,極簡核心+插件擴充
-
API 優先:tRPC、GraphQL 框架,專為後端 API
框架選擇決策矩陣
專案規模 | 建議框架
小型 API → FastAPI、Express
中型 Web → Django、Next.js
大型企業 → Spring Boot、.NET Core
即時應用 → Socket.io、FastAPI WebSocket
最佳實務:從文件開始、遵循慣例、善用 CLI、閱讀原始碼。框架是生產力倍增器,但選錯則成枷鎖。初學者從輕量框架(如 Flask)入門,理解控制反轉後再挑戰全功能框架,就能快速建構專業應用。