# Lesson 1：後端生態系與分層架構思維

後端常見的語言有非常多，包含常見的C#、.NET、Java、Python、Go…等，雖然程式語言眾多，但萬法不離其宗，背後的**架構思維**與**解決問題的能力**才是工程師的核心價值

### **關於系列文章採用語言**

> *如果內容包含程式舉例，本文會採用Laravel作為範例語言。*

### **關於PHP**

PHP語言本身的底層是透過C語言來進行撰寫的。本身PHP的核心：Zend引擎是完全用 C 語言實現的，它負責將 PHP 程式碼編譯成可執行的中間碼，並處理底層的數據結構和記憶體管理。

### **PHP的Framework**

常見的PHP Framweork：Laravel、CodeIgniter(CI)、CakePHP。但目前的開發者仍以Laravel為大宗。

### **什麼是Composer**

Composer 是 PHP 的「依賴管理工具」 (Dependency Manager) 它的存在是為了服務 整個 PHP 語言，而不僅僅是為了 Laravel。就像 npm 是為了 Node.js，pip 是為了 Python 一樣。

### **常見開發架構**

### **什麼是MVC架構**

MVC，分別對應到：Model、view、controller。  
Model 是與資料庫溝通的媒介。View是畫面(Laravel 的命名是 blade)、Controller是控制器(用於調用Model)

在傳統的三層式架構中，就這三個就可以組成一個畫面，但隨著軟體不斷發展，越來越多複雜的邏輯、高複用性的要求、解耦、避免過度肥大...等，三層式架構早已不敷使用，在傳統MVC中，業務邏輯往往被塞進 Controller。但隨著專案變大，Controller 會變得異常肥大且難以維護。這時，我們需要更細緻的分工。

目前最常見的業界結構會是如下：

![](https://c10.patreonusercontent.com/4/patreon-media/p/post/144504119/e5cbb846b0c94362b8fac4475e6ebfd3/eyJhIjoxLCJwIjoxfQ%3D%3D/1.png?token-hash=UYZBrAgS0P40mTLWAOTHwSCc0BPxQYNYDEtUDg1bA2w%3D&token-time=1766707200 align="center")

我們在 Controller 與 Model 之間，加入了 **Service** 與 **Repository**：

* Repository Pattern (資料庫存取層)：
    

職責： 專注於 DB 查詢邏輯的封裝。

Junior 該懂的觀念： 它的作用是把複雜的 SQL 或 ORM 操作（如 Join, Where 條件組合, Scope）包裝成語意化的方法（例如 findActiveUsers()）。

對 Service 來說，Repository 只是負責「執行資料庫查詢」的工具，不涉及其他外部 IO 或邏輯判斷。

* Service Layer (業務邏輯層)：
    

職責： 專注於 業務流程的調度 。

Junior 該懂的觀念： 它是系統的「大腦」。

決定行為： 判斷現在要先讀 Redis 快取？還是要透過 Repository 去查資料庫？或者是 Call 外部 API？

流程控制： 例如「先去 API 拿匯率，再去 Repository 撈商品價格，最後計算出台幣金額」。這串邏輯是 Service 負責串接的。

### **他山之石：Django 的 MTV**

為了避免陷入單一語言的思維，我們來看看 Python 的 Django。MTV，分別對應到：Model、template、view。我會選擇Django為這個架構的代表框架。

跟上面MVC比較不一樣的是：MT**V**\-View代表的是業務邏輯，而M**T**V-Template代表的是畫面UI。

**名詞不重要，職責分離（Separation of Concerns）才是重點。**
