GildedRose Factoring Kata 社群 Domain Driven Design(DDD Taiwan) 所舉辦的讀書會 Legacy Code 讀書會 3rd (Ch 8, 9) 所分享的重構練習題目,程式碼來源 在這裡,這個 Repository 為筆者的完整練習過程,按照以下的需求撰寫測試,並且重構程式碼之後,再以 TDD 開發方式新增功能。
嗨,歡迎來到鍍金玫瑰團隊。如您所知,我們是一家小旅館,位於一線城市的黃金地段,旅館老闆是艾里森(Allison)。我們只銷售高級商品。不過每件商品都有一個銷售剩餘天數。隨著時間的推移,商品的品質會不斷下降。我們擁有一個可以更新庫存訊息的系統。有位名叫River的開發人員開發了這個系統,之後就離開了。你的任務是將新功能添加到該系統中,以便我們可以開始銷售新種類的商品。
- 所有商品(item)都有一個銷售剩餘天數(SellIn)值,表示該商品必須在該值所代表的天數內銷售出去。
- 所有商品都有一個品質(Quality)值,表明該商品當前的品質。
- 每天結束時,系統會降低每個商品的上述兩個值。
- 一但商品過了銷售剩餘天數之後還沒未賣出,那麼其每日品質下降的速度就會加倍。
- 商品的品質不能為負數。
- 陳年乾酪(Aged Brie)的品質值隨著時間的推移,不減反增。
- 商品的品質的上限為50。
- 魔法錘(Sulfuras)是一個傳奇商品,其銷售剩餘天數和品質都不會變化。
- 劇院後台通行證(Backstage passes),就像陳年乾酪一樣,其品質會隨著銷售剩餘天數的減少而提高-當離演出開始不到10天時,品質每日提高2;當不到5天時,品質值每日提高3,當演出結束後,品質歸0。
魔法(Conjured)商品每日品質下降速度是正常商品的2倍(新需求)