Kata

題目

歡迎來到鑲金玫瑰(Gilded Rose)團隊。如你所知,我們是主城(暴風城)中的一個小旅店,店主非常友好,名叫 Allison。我們也售賣最好的物品。不幸的是,物品品質會隨著銷售期限的接近而不斷下降。

我們有一個系統來更新庫存信息。系統是由一個火車王(魔獸世界中導致團滅的豬隊友)Leeroy 所開發的,他已經不在這了。

你的任務是添加新功能,這樣我們就可以售賣新的物品。

先介紹一下我們的系統:

  • 每種物品(Item)都具備一個銷售期限(SellIn),表示我們要在多少天之前把物品賣出去
  • 每種的物品都具備品質值 Quality,表示物品的品質
  • 每天結束時,系統會降低每種物品的這兩個數值(UpdateQuality

很簡單吧?這還有些更有意思的:

  • 物品的品質 Quality 永遠不會為負值
  • 物品的品質 Quality 永遠不會超過 50
  • 一旦銷售期限過期,品質 Quality 會以雙倍速度(2)加速下降
  • 陳年布利乳酪(Aged Brie)的品質 Quality 會隨著時間推移而提高(1
  • 後台通行證(Backstage passes)與 陳年布利乳酪 類似,其品質 Quality 會隨著時間推移而提高
    • 當還剩 10 天或更少的時候,品質 Quality 每天提高 2
    • 當還剩 5 天或更少的時候,品質 Quality 每天提高 3
    • 但一旦過期,品質 Quality 就會降為 0
  • 傳奇物品 薩弗拉斯—炎魔拉格納羅斯之手 (Sulfuras)永不過期,也不會降低品質 Quality

我們最近簽約了一個召喚物品供應商。這需要對我們的系統進行升級:

  • 召喚物(Conjured)的品質 Quality 下降速度比正常物品快一倍

只要系統還能正常工作,請隨意對 UpdateQuality() 函數進行修改和添加新代碼。然而,不要修改 Item 類或其屬性,因為那屬於角落裡的地精,他會非常憤怒地爆你頭,因為他不相信代碼共享所有制(如果你願意,你可以將 UpdateQuality 方法和 Items 屬性改為靜態的,我們會掩護你的)。

再次澄清,每種物品的品質不會超過 50,然而 薩弗拉斯—炎魔拉格納羅斯之手(Sulfuras)是一個傳奇物品,因此它的品質是80且永遠不變。

題目翻譯,部分參考了 Repo 的譯文。

GitHub Repo

大家請挑自己熟悉的語言來練習。

https://github.com/emilybache/GildedRose-Refactoring-Kata

Java 語言版本的單元測試請參考這個 gist

修改歷程參考(請由上到下查看):https://github.com/yaosiang/GildedRose-Refactoring-Kata/compare/6a12fadmain