說明
歡迎加入 Gilded Rose 的工程團隊!
如你所知,我們是一間只買賣最優質商品的旅店。
我們的商品在接近保存期限時,品質會持續下降,所以我們有一套庫存系統來追蹤這些資料。
我們需要你在系統中新增一項功能,好讓我們能開始販售一個全新的商品類別。
不過,程式碼現在一團亂,除非你先重構現有的程式碼,否則很難加入這項新功能。
所以你的任務有兩個:先重構庫存系統,再加入新功能。
庫存系統概觀
以下是我們系統的基本規則:
- 所有商品都有一個「sell in」屬性,代表我們還剩下幾天可以賣出這個商品。
- 所有商品都有一個「quality」屬性,代表這個商品有多值錢。
- 每天結束時,我們的系統會調降每個商品的這兩個數值。
很簡單吧?不過,有趣的地方來了:
- 一旦保存期限到了,品質劣化的速度會變成兩倍。
- 商品的品質永遠不會是負數。
- **Aged Brie**放得越久,品質反而會增加。
- 商品的品質永遠不會超過 50。
- **Sulfuras**是傳說級商品,沒有保存期限,而且品質固定為 80,永遠不會下降。
- **Backstage passes和Aged Brie**一樣,會隨著保存期限接近而提高品質:剩 10 天以內時品質增加 2,剩 5 天以內時增加 3,但演唱會結束後品質會直接掉到 0。
1. 重構
為了替新功能鋪路,請重構現有的程式碼,讓它更容易修改。
只要一切仍然正常運作(也就是說,只要現有功能的測試仍然通過),你可以自由地做任何修改、新增任何程式碼。
注意:你可以假設商品的初始品質一定是有效的。
換句話說,自動化測試不會檢查商品的初始品質高於上限時會發生什麼事,也不會檢查**Sulfuras**的初始品質不是 80 時會怎樣。
2. 加入新功能
我們最近簽下了一家**Conjured**商品的供應商。
你的工作是把以下規則加入我們的系統:
- **Conjured**商品一旦過了保存期限,品質就會掉到 0。此外:
- **Conjured**的一般商品,品質劣化速度是非 Conjured 的一般商品的兩倍。
- **Conjured**的 Sulfuras 和未受魔法影響的 Sulfuras 不同,具有保存期限。
- **Conjured**的 backstage passes,品質增加量比它們未受魔法影響時少 1。