10 個面向的完整性檢查,一個都不能少

一句話總結:一個 Proto 是否「完整好用」,取決於它有沒有覆蓋這 10 個面向——每一個都不是 nice-to-have,而是生產環境的 must-have。

結論先講:只做了 Docker 但沒有 CI/CD,有 CI/CD 但沒有測試,有測試但錯誤處理各寫各的——10 個面向不是獨立存在的,它們環環相扣,少了任何一個都會在生產環境裡咬你一口。

A. 專案結構:30 秒找到你要的檔案

統一的專案結構讓任何團隊成員都能快速導航。不一致的結構則讓每個人用不同方式組織 code,最終 codebase 變成迷宮。

必須有:統一的目錄命名規範、BaseController / BaseService / BaseRepository、至少一組完整 CRUD 範例、結構說明圖。

B. 多環境設定:dev 連 dev 的 DB,prod 連 prod 的 DB

聽起來理所當然?但如果 Proto 裡沒有建好多環境機制,團隊往往在第一次部署時才臨時處理,設定散落各處。

必須有:每個環境獨立的設定檔、.env.example 範本、.gitignore 排除所有 .env、啟動時驗證必要環境變數(缺了就 fail fast,不要讓它帶著錯的設定跑起來)。

C. 容器化:Infra 的事,但 Proto 要配合

容器化歸 Infra 管,但 Proto 要提供 health check endpoint(/health),這是 Infra 做健康檢查的介面。Dockerfile 用 multi-stage build、容器跑非 root 使用者——這些由 Infra 的 Docker 設定負責。

D. 安全基線:不是事後補的東西

如果 Proto 沒有內建安全基線,團隊趕進度時一定會跳過安全措施。

必須有:認證機制骨架(JWT 或 Session,含 login/logout/refresh)、CORS 嚴格模式(在前後端分離架構中,CORS 由 Nginx 處理)、CSRF 防護、RBAC 角色權限模型、HTTP Security Headers。

E. 錯誤處理:不要讓前端猜格式

沒有統一錯誤處理的結果是:一個 endpoint 回 { "error": "..." },另一個回 { "message": "..." },還有一個直接回框架的 stack trace。前端工程師每串一個 API 都要寫特殊的 error handling。

必須有:GlobalExceptionHandler、自訂例外階層(Business / Validation / Auth)、統一的錯誤回應 JSON 格式(含 codemessagedetailstraceId)、生產環境不暴露 stack trace。

F. 日誌:唯一的除錯工具

在生產環境裡,你沒有 IDE、沒有 debugger、沒有 console.log——日誌是你唯一的眼睛。

必須有:結構化 JSON 日誌格式(EFK 才能正確解析)、Access Log(method / path / status / duration)、不同環境不同日誌等級(dev: DEBUG, prod: WARN)、敏感資訊不入日誌(密碼、Token、個資)。

G. 測試基線:沒有測試的 Proto 就像沒有安全帶的車

Proto 裡如果沒有測試範例,團隊成員很容易「等有空再寫測試」。那個「有空」永遠不會來。

必須有:單元測試結構與範例、整合測試用 Testcontainers(不依賴外部服務)、測試設定獨立於主程式、CI 裡自動跑測試。

H. CI/CD Pipeline:Infra 管,但 Proto 要有接口

跟容器化一樣歸 Infra,但 Proto 的程式碼品質工具(Lint、Test、Type Check)要能被 Pipeline 呼叫。

I. 文件:README 是專案的門面

README 寫不好,怎麼期待程式碼品質?

必須有:README 範本(介紹、需求、安裝步驟、常用指令、結構說明)、API 文件用 Swagger/OpenAPI 自動產生、CHANGELOG 遵循標準格式、ADR 範本。

J. 程式碼品質:讓工具解決 Tab vs Space 的爭論

程式碼風格不一致是團隊協作最常見的摩擦。這些爭論毫無技術價值,讓工具自動處理。

必須有:Linter(ESLint / Ruff)、Formatter(Prettier / Black)、Git Hooks(pre-commit 跑 lint + format,commit-msg 檢查 Conventional Commits)、.editorconfig

Master Checklist

10 個面向,每個面向 3-5 個檢查項。建立新 Proto 或審查現有 Proto 時,逐項確認。扣除歸 Infra 的 C 和 H 面向,Proto 本身要負責的是 8 個面向共約 30 項。

全部勾完才能叫「生產環境等級」。做不完的用 Gap Analysis 排優先順序補齊——這是下下篇的主題。

這篇的重點回顧

10 個面向涵蓋了 Proto 從結構到品質的方方面面。其中 C 和 H 歸 Infra、其餘 8 個歸 Proto。每個面向都有明確的檢查項,不是含糊的「做好一點」。

系列文章:

「Proto 的完整性就像體檢報告——你不會想在上線那天才發現哪個器官有問題。」