從 Web Forms 到 .NET 10:藉由 AI 工具賦能的火鍋店系統轉生實錄
在軟體開發的世界裡,有一種痛叫做「維護古董級系統」。這次的主角是一個運作多年、基於 ASP.NET Web Forms 打造的火鍋店優惠券系統。雖然它忠實地服務了許久,但面對當前高併發的行銷活動與現代化的 LINE 整合需求,這套老舊的體質已經漸顯疲態。加上 Windows Server 與 SQL Server 的授權與維護成本日益增加。契機是客戶這次有新需求,需要針對客戶需求開發新功能,既然都要動程式了,不如來個徹底的系統轉生。
我們的目標非常明確:全系統遷移至 .NET 10 與 PostgreSQL。
為什麼非換不可?
老實說,決定「推倒重來」是需要勇氣的。但以下幾個痛點讓我們下定決心:
- 維護成本高昂:Windows Server 的授權費與維護心力一年比一年重,且作業系統 Server 2012 已於 2023 年 EOS。
- 開發效率低落:Web Forms 的開發模式與現代前端技術(如 LIFF、Next.js)脫軌,整合起來非常痛苦。
- 擴展性受限:舊有的資料庫架構難以支援複雜的分眾行銷與大數據分析。
graph LR
subgraph Legacy ["舊架構 (Web Forms)"]
A[使用者] --> B(IIS / Windows Server)
B --> C[(MS SQL Server)]
B --> D[Windows 排程器]
end
subgraph Modern ["新架構 (.NET 10 + AI 賦能)"]
E[使用者] --> F{CapRover / Nginx}
F --> G[React SPA / LIFF]
F --> H[.NET 10 Web API]
H --> I[(PostgreSQL)]
H --> J[Quartz.NET 任務引擎]
end
Legacy -. "AI & Codex <br/> 邏輯解構與遷移" .-> Modern
技術棧的轉身:擁抱 Linux 與 Open Source
這次轉生的核心戰略,就是徹底脫離微軟的舊架構,走向更廣闊的開源世界:
- 核心框架:由 .NET Framework 4.x 直接跨越到 .NET 10。享受跨平台的極致效能與現代 C# 語法的開發便利。
- 資料庫:捨棄 SQL Server,轉向強大的 PostgreSQL。
- 部署環境:透過 Docker 容器化,部署在 Linux 伺服器上(我們選擇在 Vultr 使用 CapRover),維護成本直接砍半。
AI 驅動的系統轉生計畫:藉由 Codex 實現高效遷移
我們以 Codex 開發平台作為核心,這不只是單純的程式碼生成,更是將其定位為「舊邏輯的解密翻譯機」。面對 Web Forms 那些動輒數千行、邏輯交織的 .aspx.cs 檔案,我們利用 AI 快速提取業務規則,並精準重構成現代化的 API 與 Hooks。整個轉生計畫分為五個階段,僅費時約三週便平安落地。
階段 1:地基工程 —— 打破單體,鋪設現代化管線
這是整場計畫的起點。以往 Web Forms 那種「前後端耦合」的架構,隨著用戶數增長已成為維護上的負擔。我們首先將底層基礎徹底打掉重練,換上更輕量的 Linux 容器化環境。這部分最大的效益在於首日便跑通了 CI/CD,讓後續的開發與上線流程都能在幾秒鐘內自動完成。
- 前後端分離:建立專門的 .NET 10 Web API 與 React 專案,讓開發邏輯完全解耦。
- Codex 快速腳手架:利用 AI 快速生成基礎數據表與靜態官網,節省了大量重複性的基礎勞力。
- 容器化部署:選用 CapRover + Docker,解除 Windows 授權費限制,也大幅降低運維成本。
階段 2:前線突擊 —— LIFF 應用全面優化
LINE LIFF 是使用者最頻繁接觸的窗口,舊版每次開啟時的「白畫面」等待時間,對使用者體驗傷害很大。我們引導 Codex 參考舊有的 .aspx.cs 業務邏輯,改用 React Hooks 重新封裝。除了功能平移,更針對頁面流暢度進行深度優化,讓操作體驗變得非常順滑。
- 邏輯精確移植:透過 AI 協助,將複雜的 Web Forms 業務規則轉換為乾淨的 API 介面。
- UX 流暢度提升:導入 Skeleton Screen 與過渡動畫,解決舊版加載時的停頓感。
- 高效快取機制:前端 React 搭配 API 層的快取設定,讓使用者查券、領券的反應速度接近瞬發。
階段 3:核心功能 —— 背景任務引擎 (Background Tasks)
過去發送優惠券與生日禮的排程,散落在多個掛載於 Windows 排程器上的 .exe 檔案,極難監控與管理。這次我們將任務全數收編,改用 Quartz.NET 進行核心集成。現在我們可以直接在應用程式內監控所有任務狀態,再也不必擔心單線程任務阻塞 Web Server。
- 任務非同步化:以前發券常遇到 Request Timeout,現在轉由背景 Queue 處理,系統穩定度大幅增加。
- Quartz.NET 排程器:實現精細化的任務調度,從分鐘級的狀態檢核到年度的生日自動發放皆能自動化運行。
- 故障補償機制:設計了完整的 Job Retry 邏輯,確保在 API 或網路不穩時也能自動補發,保障使用者權益。
階段 4:操控中心 —— 現代化 React 管理後台
後台系統是營運人員的作業核心。相比 Web Forms 每次修改都需要長時間編譯,Vite 的熱更新效率讓開發體驗有了質的飛躍。我們選用 Radix UI 建立標準化的元件庫,並特別設計了一個專屬的 Migration Dashboard,用來監控數萬筆數據的遷移狀況。
- Vite + React 18:開發效率顯著提升,HMR (Hot Module Replacement) 幾乎消除了所有等待建置的時間。
- Radix UI 規範化:建立標準化 UI 元件,讓後續擴充功能像拼積木一樣快速。
- 遷移監控看板:專門為系統轉換設計的圖像化介面,確保每筆數據都能精確地從 SQL Server 搬遷至 PostgreSQL。
階段 5:數據重生 —— 百萬數據平安落地
這是遷移中最關鍵的一環。SQL Server 轉 PostgreSQL 存在許多型別坑,如大小寫敏感、bit 轉換以及序列自增等問題。我利用 AI 開發了一套遷移工具介面,並在測試環境中反覆針對邊界情況進行壓力測試與驗證。當遷移邏輯確認完美後,才正式執行正式環境的搬遷。
- SqlSugar 跨庫引擎:同時操控兩個資料庫 Provider,實現高效的 Batching 分批搬遷,大幅縮短停機時間。
- 數據自動修復:遷移過程中自動檢查圖片路徑、校準資料表序列 (Sequence Alignment),確保遷移後功能立即運作。
- 嚴謹驗證流程:包含總筆數核對與隨機欄位的抽樣比對 (Detailed Verify),確保數據在大換血後依然完整無誤。
[!IMPORTANT]
這套遷移流程不僅解決了底層資料庫的差異,更完成了一次全面性的數據健檢,徹底清理了累積多年的沉贅資料。
轉生前後對照:不只是效能,更是維運的跨代飛躍
| 維度 | 舊系統 (Web Forms) | 新架構 (.NET 10 + React) |
|---|---|---|
| 部署環境 | Windows Server (IIS) | Linux Container (Docker/CapRover) |
| 資料庫 | MS SQL Server (授權費貴) | PostgreSQL (開源高效) |
| 開發模式 | 前後端強耦合 (Slow) | API + React 分離 (Fast & Clean) |
| 維修與更新 | 每次修改需長時間編譯 | Vite HMR 瞬發更新 |
| 基礎設施成本 | 高額 Windows 授權費 | 節省約 60% 的主機月開銷 |
結語
從 Web Forms 到 .NET 10 的路雖然辛苦,但看到系統能在 Linux 上穩定運行、載入速度提升數倍、且維護費用大幅降低,所有的努力都值得了。
[!TIP]
延伸閱讀:關於這次重構中「如何解決跨 Provider 的 LINE UserId 綁定問題」,可以參考我的另一篇實錄:LINE Login 與 LINE Messaging API 整合實錄:揮別技術債,邁向自動化行銷的轉生之路。


