# Recap [三國殺] 練習 ATDD/TDD 基本流程 1. 許願 2. 實現願望 ## 開始遊戲 create_game 情境:我們「想像」大平台會跟我們說建立的遊戲 id 與 player 的 id。遊戲開始後,我們可以知道場上有哪些玩家。 ### 願望內容 POST /api/games Request Body: ```json { "gameId": "my-id", "players": [ { "id": "player-a" }, { "id": "player-b" }, { "id": "player-c" }, { "id": "player-d" } ] } ``` Response Body: 同上。 ### 實現願望 1. 實作對應的 controller,並簡單地 hardcode response 讓測試過關 2. 開始實作對應的 GameDto 與 PlayerDto,接上 Request Body 的內容 3. 試著修改 test case,確定實作會隨著 input data 變化 4. 開始做 repository 與 Domain model:Game 與 Player 5. 實作 Domain model 與 DTO 的轉換 6. 做一個 find-the-game 確定 Game 的資料有正確保存 ## 指定玩家角色 assignRoles 情境:遊戲開始到玩家可以動作前,系統要替玩家隨機指派角色。 ### 願望內容 > 修改願望,一樣的 Request 進去,但回來時要多出被指派的角色 POST /api/games Request Body: ```json { "gameId": "my-id", "players": [ { "id": "player-a" }, { "id": "player-b" }, { "id": "player-c" }, { "id": "player-d" } ] } ``` Response Body: ```json { "gameId": "my-id", "players": [ { "id": "player-a", "role": "Monarch" }, { "id": "player-b", "role": "Minister" }, { "id": "player-c", "role": "Rebel" }, { "id": "player-d", "role": "Traitor" } ] } ``` ### 實現願望 做法大同小異: 1. 先將角色 hardcode 到 4 個玩家身上 2. 在 hardcode 的邏輯達到測試綠燈的情況下,開始加入實際的分派角色類別 3. ...etc ---- ## 後續的練習與實作 1. 試著將 happy path 路線擴展到每一位玩家,出過一次牌 (或一個動作)。 2. 完成 happy path 後,參考 OOA 與 Example Mapping 用 TDD 的方式細修 Domain Model。 ### Item 1 這部分的內容,主要透過先前的「許願」練習就能達成,因為大家都參與了 Event Storming 在流程上不太會有大問題。會缺少的經驗是在「測試期」注入「預先控制好的角色或牌組」,但在變 production 前,永遠只有測試版的也沒什麼關係。 ### Item 2 因為昨天是「小步快跑」總體進展不大,還沒有用到 OOA 與 Example Mapping 的產出,在 Happy Path 推展到一個階段。不用完成的 ATDD 推完,就可以分工去細修 Domain Model。