IRONSOFTWAREHOME

C# WinForms競賽邏輯教程 — 全課程18拆解 (Tim Corey)

C# App Start To Finish Lesson 18 - Create Tournament Form Part 4

Tim Corey

1h 15m 39s

在Tim Corey的C#應用程式從頭到尾系列的第18課中,重點大幅轉向在C# WinForms(Windows Forms)應用程式中進行邏輯驅動的開發。與早期課程強調使用者介面、WinForms控制項和使用設計工具進行的視覺佈局不同,此課程關於構建一個在幕後正確運作的系統。

Tim反覆解釋這是實際開發投入的地方。 與設計必須適用於所有可能場景的邏輯相比,按鈕、文字框和常用控制項都是簡單的。 這課程代表了一個轉折點,應用程式開始感覺像一個真的Windows桌面應用程式,而不僅僅是一個示範。

整個課程使用Visual Studio講授,利用.NET Framework、一個類別程式庫和一個支援未來增長的WinForms專案型別。

從UI轉向設計邏輯

在課程初期,Tim提出了一個重要觀點:不要立即開始寫程式碼。 他解釋了複雜邏輯絕不應該從表單的後端程式碼開始。相反,他暫停了Windows Forms應用程式,拿起筆和紙,開始視覺設計比賽結構。

這是一個有意識的轉移,遠離設計器、工具箱和屬性格。 Tim強調,儘管WinForms提供了一個全面的UI工具套件,但是邏輯不能被拖放——它必須被設計。

他提到他已經多次重寫這個邏輯,證明修補錯誤和重新思考方法是開發中的正常部分。

從概念上理解比賽結構

Tim從系統設計的角度講述了比賽究竟是什麼。他定義了:

  • 隊伍

  • 對陣

  • 對陣項目

  • 回合

  • 雙塔

每個對陣包含對陣項目,而每個項目可能或可能尚不知道其代表的隊伍。 這個想法在實現未來回合時變得至關重要。

Tim用三個隊伍的簡單例子解釋了為何比賽需要兩的倍數。 因此,雙塔並不是一個特殊功能——它們是一個數學必需。

這部分更側重於以開發者的思維方式進行思考,而不是程式碼,這是Tim在整個系列中反復強調的。

為何某些隊伍必須為空

此時,Tim切換到Visual Studio,打開解決方案資源管理器,並進入資料庫專案。 他雙擊進入表設計並解釋了一個微妙但關鍵的要求:未來回合不可以提前知道隊伍。

因此,TeamCompetingId字段必須允許空值。

Tim打開屬性窗口,解釋SQL Server的安全警告,並展示如何臨時禁用防止需要重新建立表的更改。 他謹慎地指出,這樣做之所以安全是因為表是空的。

這是一個經典的例子,它平衡了開發速度、資料完整性和現實世界中的限制。

保持表單清潔和專注

返回到WinForms專案時,Tim強化了一個從課程開始就遵循的規則: 表單不應包含業務邏輯。

儘管WinForms使得在按鈕單擊事件中直接編寫邏輯變得容易,但Tim解釋這樣做會損害:

  • 可維護性

  • 可重用性

  • 測試性

  • 未來平台相容性

相反,表單的責任僅限於:

  • 從UI收集輸入

  • 呼叫方法

  • 顯示結果

這种分離保持了Windows桌面應用程式清晰且專業。

建立TournamentLogic類

Tim建立了一個新類別程式庫並引入了一個靜態的TournamentLogic類。 這個類不是UI、不是資料存取,也不是模型——它純粹為實現邏輯而存在。

他解釋了這種設計選擇允許在以後重新使用相同的邏輯於:

  • WPF

  • ASP.NET

  • 其他.NET桌面或網頁平台

這一刻默默地展示了為什麼WinForms依然相關:正確使用時,它可以順利地與現代架構整合。

公平地隨機化隊伍

Tim實現了一個方法,使用以下方法隨機化隊伍順序:

OrderBy(x => Guid.NewGuid())
Text

他承認這並非密碼學上完美,但解釋它是:

  • 簡單

  • 易讀

  • 支援

  • 以後容易替換

這與課程中反複出現的主題一致:先達到正確性,然後再進行優化。

他還解釋了為什麼原始清單不被修改,以避免意想不到的副作用——這是一個微妙但重要的程式習慣。

計算總回合數量

這部分耗時比預期更長,Tim坦誠地解釋為什麼:邏輯容易被誤解。

他演示如何使用迴圈計算回合,而不是依賴模糊用意的公式。 目標是清楚而不是聰明。

Tim驗證每個案例:

  • 2隊 → 1回合

  • 3隊 → 2回合

  • 4隊 → 2回合

  • 8隊 → 3回合

他反復鼓勵觀眾暫停、測試並在隔離環境中驗證邏輯,然後再信任它。

確定需要的雙塔數量

Tim沒有使用Math.Pow,而是精心編寫手動邏輯來計算下一個二的冪次。 他解釋避免使用雙精度能減少錯誤並提高可讀性。

這一部分顯示了有經驗的開發者經常選擇無趣和明確的程式碼,因為它更容易除錯和維護。

建立第一回合

首回合是不一樣的,因為:

  • 隊伍已知

  • 應用雙塔

  • 父對陣不存在

Tim仔細講解如何建立對陣,何時完成對陣,以及如何自動推進雙塔隊伍。

這一邏輯通過逐步實現,每一步都有頻繁的暫停來解釋為什麼做出每個決定。

構建後續回合

後續回合的建立方法截然不同。 隊伍是未知的,所以使用父對陣代替。

Tim解釋了如何利用前一回合的對陣進入下一回合,在沒有一場比賽完結前建立完整的比賽樹。

這是整個應用程式中最重要的建築決策之一,並啟用:

  • 記分追蹤

  • 勝者推進

  • 未來自動化

最終審查和驗證

在課程的最後幾分鐘中,Tim回顧了整個流程:

  • 隊伍被隨機化

  • 計算回合

  • 分配雙塔

  • 產生對陣

  • 比賽結構完整

他強調錯誤是意料之中的,邏輯隨著時間的推進會改進,而專業的開發者不斷回訪早期的程式碼以改善它。

結語

第18課不是關於WinForms控制項、拖放UI或華麗的功能。 而是在思考、設計和編寫面對實際使用的程式碼。

影片結尾時,應用程式從一個簡單的Windows Forms應用程式轉變為一個結構化、可擴展的.NET桌面程式——如果需要,它可以擴展得超出WinForms的範圍。

這是學習從學術性轉變為專業性的地方。

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

立即免費取得 30 天試用金鑰

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
獲取您的無義務諮詢
填寫以下表格或發送電子郵件至sales@ironsoftware.com
您的詳細資訊將始終保密。
被全球數百萬工程師信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立