一個完整專案從 0 到上線

是什麼?(這課把前面所有觀念串成一條真實的路)

前面每一課——SDLC、需求與 User Story、架構切分、Clean Architecture、SOLID、測試、Git 策略、CI/CD、監控——你都單獨學過了。但真實工作裡,它們不是各自獨立的知識點,而是同一條河流上的不同河段。這堂課不教新觀念,而是用一個你看得到、摸得著的具體專案,把這些觀念按照真實發生的順序串起來,讓你看見一個專案從「一句話的想法」走到「在 Production 穩定運行並持續改進」的全貌。

ℹ️這是一堂總整理課

看到任何一個階段,請回想「這對應到前面哪一課」。當你能在腦中把這條路完整走一遍,代表你已經具備帶領一個專案落地的整體視野,而不只是會寫某一段程式。

專案設定

我們要做一個員工請假系統(Leave Request System)的 Web API。情境如下:

這個題目剛好夠複雜(有規則、有狀態、有角色),又夠單純(不會讓你陷在細節裡),很適合當作總整理的載體。

全流程里程碑

1

構想

一句話的商業需求:讓請假流程數位化

2

需求與 User Story

把模糊的想法拆成可驗收的故事與驗收條件

3

技術選型

選定 .NET、EF Core、雲端容器與資料庫

4

架構設計

用 Clean Architecture 切四層,畫出邊界

5

建 repo 與分支策略

初始化版本控制,採 Trunk-Based 短命分支

6

開發

分層實作,搭配 TDD 與測試金字塔

7

PR 與 Code Review

小顆 PR、自動檢查、同儕審查

8

CI/CD

自動建置、測試、掃描、打包

9

部署到測試環境

先進 Staging 做整合與 UAT

10

上 Production

走檢查清單,採漸進式發布

11

監控與迭代

結構化日誌、告警、回饋驅動下一輪

各階段實際做什麼

構想與需求/User Story。 一切從一句話開始:「我們要讓請假不用再寫紙本」。但這句話無法開發。如同〈需求與 User Story〉那一課,我們要把它拆成可驗收的故事,例如「身為員工,我想線上提出請假,以便不用跑到 HR 櫃台」,並補上驗收條件(Acceptance Criteria):特休不足時要擋下、跨年度請假要分段計算。這一步偷懶,後面所有努力都會做錯方向。

技術選型與架構設計。 確認用 ASP.NET Core 後,依照〈Clean Architecture〉那一課把系統切成四層:Domain(LeaveRequest 實體,內含「已核准不可重複申請」這類核心規則)、Application(SubmitLeaveRequestUseCase、定義 ILeaveRepository 介面)、Infrastructure(EF Core 實作 Repository、寄通知)、Presentation(Controller)。依賴一律指向內,並用 SOLID 的 DIP 讓內層只依賴介面。

建 repo 與分支策略。 初始化 Git,採〈Git 策略〉提到的 Trunk-Based Development + 短命分支:每個 User Story 開一條活不過兩三天的 feature 分支,盡快合回主幹,避免長壽分支累積巨大的合併衝突。

開發(Clean Architecture + TDD)。 從 Domain 規則開始,先寫測試再寫實作。遵循〈測試〉那一課的測試金字塔:大量快速的單元測試(驗證請假天數計算、狀態轉換)、適量整合測試(驗證 Repository 真的存得進資料庫)、少量端對端測試(驗證 API 從請求到回應的完整路徑)。同時謹記 YAGNI——第一版不做「多公司多租戶」這種還沒人要的功能。

PR 與 Code Review。 每條分支以小顆 PR 提交,CI 先自動跑測試與靜態分析,再由同儕審查可讀性、邊界情況與安全性。小 PR 才審得動、審得快。

CI/CD 到部署。 推上去後,CI 自動建置、跑測試、做安全掃描、產出容器映像(對應〈CI/CD 基礎〉)。通過後 CD 自動部署到 Staging 測試環境做整合與 UAT,確認無誤才用漸進式發布(藍綠或金絲雀)推上 Production

監控與迭代。 上線不是終點。導入結構化日誌與告警(對應〈監控〉),追蹤錯誤率、延遲、請假核准耗時等指標。從真實使用數據與使用者回饋,決定下一個迭代要做什麼——回到需求那一步,形成循環。

關鍵設定範例

一個 User Story 的範例寫法:

text
標題:員工提出請假申請
身為 一名正職員工
我想 在系統上選擇請假類型與日期並送出
以便 不用填紙本表單跑 HR 櫃台
 
驗收條件:
- 特休餘額不足時,送出被擋下並顯示剩餘天數
- 起始日不可早於今天
- 送出成功後,直屬主管收到待審通知

對應的 .NET 解決方案結構(Clean Architecture 四層):

text
LeaveSystem.sln
├─ src/
│  ├─ LeaveSystem.Domain/          # 實體與核心規則,零外部相依
│  ├─ LeaveSystem.Application/     # Use Case 與介面(ILeaveRepository)
│  ├─ LeaveSystem.Infrastructure/  # EF Core、Repository 實作、通知
│  └─ LeaveSystem.WebApi/          # Controller / Minimal API、DI 組裝
└─ tests/
   ├─ LeaveSystem.UnitTests/        # 大量單元測試(測試金字塔底層)
   ├─ LeaveSystem.IntegrationTests/ # 整合測試
   └─ LeaveSystem.EndToEndTests/    # 少量 E2E

一段精簡的 CI 設定片段:

yaml
name: ci
on:
  pull_request:
    branches: [ main ]
jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-dotnet@v4
        with:
          dotnet-version: "8.0.x"
      - run: dotnet restore
      - run: dotnet build --no-restore --configuration Release
      - run: dotnet test --no-build --configuration Release --collect:"XPlat Code Coverage"

整體流程圖

開發者
提交小顆 PR
PR + Code Review
觸發
CI 建置/測試/掃描
通過後部署
Staging 測試環境
UAT 通過、漸進發布
Production
產生指標與日誌
監控與告警

注意最後那條從監控指回開發者的箭頭——這就是讓專案持續變好的回饋迴圈,而不是上線即結束的單行道。

上線檢查清單

正式推 Production 前,逐項確認:

常見誤區

⚠️跳過需求直接動手寫

「需求我懂,先寫再說」是最貴的錯誤。需求沒講清楚就開工,常常做出技術上完美、卻不是使用者要的東西,重做的成本遠高於前期多花的幾小時。

⚠️沒有回滾計畫就上線

上線一定會有出錯的一天。如果你沒有事先準備好、且演練過的回滾方案,出事當下只能慌亂手動救火,故障時間被無限拉長。回滾能力本身就是上線的前置條件。

⚠️上線後才想到監控

「先讓它跑起來,監控之後再補」的結果,通常是使用者比你還早發現系統壞了。監控與告警必須在上線前就位,否則你等於是閉著眼睛開車。

實戰補充

Q:MVP(最小可行產品)該包含什麼? A:只包含「能驗證核心價值」的最小功能集。以請假系統來說,MVP 就是「員工能送出申請、主管能核准/駁回」這條主線。報表、多語系、行事曆整合都可以晚點再做。判斷標準:拿掉它,這個產品還能不能驗證「數位化請假是否真的省事」?能,就先不做。

Q:第一版要不要做到完美? A:不要。追求第一版完美會掉進過度設計(呼應 YAGNI),把時間花在還沒被驗證的需求上。正確做法是先做出夠用的版本上線,從真實使用中拿到回饋,再用一輪輪迭代逼近「對的」產品。能上線並持續改進,遠勝過完美卻遲遲不上線。

理解測驗

🤔 在這個請假系統專案中,最不該被省略、一旦做錯會讓後續所有努力白費的階段是哪一個?

🤔 關於 MVP 與第一版的策略,下列何者最符合本課(與 YAGNI)的精神?

🤔 整體流程圖中,從『監控與告警』指回『開發者』的那條箭頭代表什麼?

重點整理

💡一句話記住

做專案不是「寫完程式」,而是「從一句想法,沿著需求→架構→開發→審查→CI/CD→上線→監控的迴圈,做出能持續變好的產品」。

階段核心產出呼應的前面課程
需求 / User Story可驗收的故事與驗收條件需求與 User Story
架構設計Clean Architecture 四層邊界Clean Architecture、SOLID
分支策略Trunk-Based + 短命分支Git 策略
開發測試金字塔下的可測程式碼測試、TDD、YAGNI
CI/CD自動建置、測試、掃描、部署CI/CD 基礎
上線走完檢查清單 + 回滾計畫SDLC、部署策略
監控與迭代結構化日誌、告警、回饋迴圈監控與可觀測性

你可能也想看

SRE 入門:從後端 RD 到網站可靠性工程回到目錄 →

按 ← → 鍵切換課程