说明
欢迎加入 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 normal items**的质量下降速度是非魔法普通物品的两倍。
- 与未使用魔法的 Sulfuras 不同,**Conjured Sulfuras**有销售期限。
- **Conjured backstage passes**的质量增加量比未使用魔法时少 1。