iT邦幫忙

2025 iThome 鐵人賽

DAY 30
0

經過這 30 天,我們從 C# 語法基礎 出發,
一路學到 WPF 架構、資料繫結、LiteDB 本地資料儲存、API 整合、技術指標計算、單元測試
最終完成了一個能實際運作的桌面選股工具。

這最後一篇,我們不再寫程式,而是回顧整個過程,
整理關鍵學習與架構,並思考接下來可以如何延伸。


一、從 Hello World 到桌面應用:學習路徑回顧

階段 主題重點 關鍵學習
第 1~5 天 C# 語法基礎 變數、條件、方法、流程控制、資料型別
第 6~10 天 物件導向與例外處理 Class、OOP 三大特性、SOLID 原則、try-catch 設計
第 11~15 天 WPF 架構 XAML、MVVM、Binding、DataContext、ViewModel
第 16~20 天 實作與整合 綁定 API、顯示股票資料、非同步更新 UI
第 21~25 天 本地資料與 DI LiteDB、Repository 模式、Microsoft.Extensions.DependencyInjection
第 26~28 天 API 管理與開發習慣 Token 安全性、錯誤處理、Git、例外紀錄與調查原則
第 29 天 測試與品質保證 Unit Test、Mock、AutoMock、平行測試與 Thread Safety

這個系列的目標,是讓學習者每天都能看到實際成果,
不只是理解理論,而是能親手完成可執行的應用程式。


二、學到的不只是 WPF

除了語法與框架,你也培養了工程思維。

抽象與模組化

透過 Interface + Repository + Service 的設計,
讓邏輯清晰、可重複使用,也方便測試。

責任分離

利用 MVVM 架構分離畫面與邏輯,
在維護階段可以獨立修改畫面或業務邏輯而不互相影響。

錯誤處理與紀錄

在 try-catch 中記錄發生錯誤時的參數與環境,
確保每個問題都能在事後被重現與排查。

測試文化

導入UnitTest,並加入許多輔助寫UnitTest的套件如: MoqMoq.AutoMock 等工具,
讓邏輯可被單元測試驗證,減少錯誤。

最終成果不只是程式,而是一個可維護、可驗證的系統。


三、架構總覽:MyStockApp 的核心組成

整個選股工具最終包含以下主要模組:

模組 功能 關鍵類別
Model 資料結構與技術指標定義 StockProfile, DailyQuote, TechIndicator
Repository 存取 LiteDB 與本地資料 IDatabaseRepository, LiteDbStockRepository
Service 呼叫 API、計算指標邏輯 IIndicatorService, IStockApiService
ViewModel 處理資料繫結與命令 StockFilterViewModel, MainWindowViewModel
Infrastructure DI 註冊、系統設定 App.xaml.cs, ServiceCollection
Tests 自動化測試驗證 IndicatorServiceTests, StockFilterViewModelTests

此架構結合 MVVM + Repository + DI
是目前常見的架構中最穩定、易維護的設計模式之一。


四、未來可延伸的方向

這個專案只是起點。以下是幾個可以進一步挑戰的方向。

1. 整合即時市場資料

  • 使用 WebSocket 或 SignalR 取得即時報價。
  • 動態更新走勢圖與成交量。

2. 擴充技術指標分析

  • 新增 RSI、EMA、Bollinger Bands 等指標。
  • 建立「策略組合」以多條件篩選股票。

3. 加入視覺化分析

  • 使用 LiveCharts2OxyPlot 顯示 K 線、KD、MACD。
  • 支援滑鼠縮放與資料提示功能。

4. 自動化與排程

  • 每日開盤前自動更新資料。
  • 批次重算技術指標,並輸出報告。

5. 將專案轉為可發佈應用

  • 封裝為 WebAPI 提供遠端查詢。
  • 使用 MSIX 或 Squirrel 打包成 Windows 桌面安裝版。

五、如何將專案轉為開源作品

完成這樣的系統後,你已經具備一個能展示在履歷或社群上的完整作品。

1. 上傳 GitHub

  • 撰寫詳細的 README(介紹專案用途與執行方式)
  • 新增 CONTRIBUTING.md(說明貢獻與開發規範)
  • 加上 LICENSE(如 MIT、Apache 2.0)

2. 自動測試與 CI/CD

可使用 GitHub Actions 在每次 commit 時自動測試:

- name: Run unit tests
  run: dotnet test --configuration Release

3. 撰寫技術文章

分享你的開發經驗,例如:

  • 「從 WinForm 到 WPF:MVVM 架構重構心得」
  • 「LiteDB + WPF 打造離線選股系統」
  • 「如何用 Moq.AutoMock 快速測試 ViewModel」

這些都是展示你技術實力的方式。


六、結語:30 天後的你

從第一天的 C# 變數,到最後的 WPF 專案與測試,
你不只是完成一個應用程式,而是走過一段完整的工程開發流程。

你學會的不只是「怎麼寫程式」,
而是「如何設計一個可長期維護的系統」。

這系列的核心理念是:

學會用程式思考問題,用架構解決問題。

不論未來你要開發金融系統、企業應用,或是個人工具,
這套方法論都能成為你的基礎。


七、下一步的挑戰建議

  • 將指標模組改為 Plug-in 架構,支援動態載入策略。
  • 導入 ML.NET 進行股價趨勢預測。
  • 改寫為 Blazor 或 .NET MAUI 應用,實現跨平台版本。
  • 開始指導他人、撰寫系列文章,成為下一位技術分享者。

八、關於實際成品與學習深度說明

在本篇文章中,我附上了我實際完成的 WPF 選股工具應用程式截圖。
https://ithelp.ithome.com.tw/upload/images/20251011/20121224RySJwuOn80.png
這個成品是完整可運作的系統,包含完整的資料抓取、指標分析、UI 視覺化與快取邏輯。

本次的「30 天系列」內容主要是為了幫助初學者能快速理解與實作
因此在文章中,我刻意將講解與程式結構設計簡化,
以便讀者能夠每天都學會一個主題、循序漸進地完成一個可運作的專案。

實際的完整專案版本,無論在架構分層、非同步處理、錯誤追蹤與資料快取邏輯上,都遠比這 30 天的教學示例更為複雜、模組化與工程化。

如果你對於 開發桌面應用程式(特別是 WPF 架構) 有興趣、
或想更深入了解我實際專案的架構與實作,
歡迎透過社群或私訊與我聯繫。
我樂於與有興趣的開發者交流、討論實作細節與架構設計經驗。


程式語言會變,框架會換,但思維會留。
—— Akito,2025 IT 鐵人賽《30 天快速上手製作 WPF 選股工具》


上一篇
Day 29 — 單元測試(Unit Test):讓程式不再靠祈禱維持穩定
系列文
30天快速上手製作WPF選股工具 — 從C#基礎到LiteDB與Web API整合30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言