再消基本型別偏執 基本型別是必要的存在,因為它儲存了系統的狀態。為什麼「基本型別偏執」會是一個壞味道?因為如果我們大量地直接操作基本型別,那麼閱讀者(也就是三...
TDD(測試驅動開發 Test Driven Develop)是一種軟體開發方法,它要求在編寫任何程式碼之前,先撰寫測試案例。這樣可以確保程式碼的品質和可靠性,...
視情況注入判斷規則 截至目前為止,我們判斷要不要從 Base Game 進入 Free Game 的規則都是固定的,我們進入 Free Game 之後要送幾場...
昨日回顧與今日目標 在 Day 1,我們了解 TDD「紅燈-綠燈-重構」的核心思想,並建立起「TDD 是為了更快地交付高品質軟體」的正確心態。理論的種子已經播下...
Hi all, 來到第二天 想先來介紹介紹自己的開發方式,以便往後的code在順序上是看得懂的。 首先 TDD 全名是 測試驅動開發 (Test Driven...
簡單工廠 現在我們的 Calculator 已經有 Slot 算分器基本要有的功能了。真要說的話,一個非功能需求我們還沒達成,也就是「容易創建」。 現在的...
昨日回顧與今日目標 在 Day 20,我們完成了一次 AI TDD 實戰,從零開發了一個 Gin API 端點。我們證明了,即使在涉及框架和 HTTP 的場景下...
Checked Exception 與 Unchecked Exception 「例外處理不就是 try-catch 嗎?有什麼難的?」 會說這種話的人,肯定...
類別整理 我們花了二十幾天,從一行程式都沒有,甚至連規則都不太清楚的情況下,開始我們的 TDD ft. Slot 之旅。我們一開始什麼都不會,只會寫死 ret...
Hi all, 來到第五天,今天目標是是解說下 區塊的產生並將其實做出來。 首先我們的區塊組成如昨天所述: { "Id": 0, &...
TDD ft. Recovery 在實踐 Recovery 時,按 TDD 的流程,我們要先給一個壞掉的測試。這裡既然我們已經決定要用 Memento 設計模...
抽方法 抽方法是很常見的重構技巧,其好處有二: 把一個很長很雜亂的函式整理乾淨 抽出去的方法可以命名得更能暴露意圖 有些人會質疑,因為抽方法並不是重構的萬...
昨日回顧與今日目標 在 Day 18 的完整實戰中,我們成功地指揮 AI,遵循 G-P-T-R 模式完成了一個微型 Kata。我們體驗了如何透過精準的 Prom...
Hi all, 到了第四天終於可以來搞專案了,今天的目標很簡單,我想要寫出取得 Block 的 API。 首先來簡單介紹下 Block 的結構: { In...
存異求同 Base Game 與 Free Game 一開始時差很多,經過我們一番整理後,看起來長得很像,而事實上它們不只長得很像,它們其實本質上根本就在做同...
邊做邊重構 一直以來我們都是使用「邊做邊重構」的方式來進行開發,本集也不例外。這一集與其他集不同的是,我們要一口氣把 Free Game 的邏輯做完。 雖說是...
昨日回顧與今日目標 在 Day 17 中,我們成功整合了 AI 好同事——GitHub Copilot,但我們也需要能夠意識到,一個只會瘋狂寫 producti...
昨日回顧與今日目標 在昨天,我們已經成功 setup Golang 開發與測試環境,並透過一個簡單的 Hello, Test! 驗證了所有工具都已就緒,我們的...
CQS 在軟體設計中有一種思路叫「命令與查詢分離」(Command Query Separation),意思是指我們把所有操作都分成兩種:會改變狀態的命令,與...
Hi all, 來到第三天,今天來稍微介紹下這次 side project 的專案架構好了。 這次主要會是以 tdd 的角度搭建所謂的 三層式架構,分別是 Co...
昨日回顧與今日目標 在 Day 4,我們掌握了 Go 內建的測試工具,學會了 _test.go 的檔案結構和 go test 指令的實用flag,我們現在已經可...
昨日回顧與今日目標 在 Day 6,我們透過「表格驅動測試」掌握了組織和擴充測試案例的強大模式。到目前為止,我們測試的 Add 函式是一個美好的「純函式」——沒...
昨日回顧與今日目標 在 Day 5,我們學會了使用 testify 套件來撰寫優雅且富有表達力的斷言,並掌握了 assert 和 require 的使用時機,讓...
TDD 的「標準姿勢」 重構的過程中,我一定要用付費的 IDE 來做事嗎?我一定要把步驟切這麼小嗎?當我腦中就真的有一個非常清楚的樣貌,這時我可不可以不要 b...
抽象化 抽象化是所有重構技巧的根基。何謂抽象化?抽象化指的是一段程式碼不被當下的特殊狀態綁住,單純只看業務邏輯,抽象化也是一個把『不同』與『相同』分離出來的技...
昨日回顧與今日目標 在 Day 28 的探討中,我們審視了在專業環境中使用 AI 的倫理、版權與隱私議題,並認識到作為一個負責任的開發者,我們需要擁抱 AI 的...
昨日回顧與今日目標 在 Day 16 的理性探討中,我們面對了 TDD 的適用邊界,我們認識到,TDD 雖是利器,卻非萬能的銀彈。 在過去的兩週裡,我們投入了大...
昨日回顧與今日目標 在 Day 21,我們成功地將 AI 轉變為我們的專業QA,利用它的窮舉能力,為我們的程式碼增加了大量邊界條件測試,極大地提升了程式碼的可用...
昨日回顧與今日目標 在 Day 8,我們成功搭建了 TDD Kata 練習的專案,一個結構清晰的 go-tdd-kata 專案。我們將開始 TDD 的黃金循環:...
昨日回顧與今日目標 在 Day 23,我們體驗了 TDD 實踐中最棘手的敵人——遺留程式碼,我們學會了利用 AI 生成「特性測試」,為前人留下的舊程式碼建立起保...