説明
Gilded Roseのエンジニアチームへようこそ!
ご存じのとおり、ここは最高級の品物だけを仕入れて販売する宿です。
商品は販売期限が近づくにつれて品質がどんどん劣化していくため、そのデータを管理する在庫管理システムがあります。
新しいカテゴリのアイテムを販売できるように、システムに新しい機能を追加してほしいと頼まれています。
ただし、コードはごちゃごちゃしていて、まず既存のコードをリファクタリングしないと、新しい機能を追加するのは難しいでしょう。
つまり、やることは2つあります。在庫管理システムをリファクタリングし、それから新しい機能を追加します。
在庫管理システムの概要
システムの基本は次のとおりです。
- すべてのアイテムには"sell in"属性があり、そのアイテムを販売できる日数を表します。
- すべてのアイテムには"quality"属性があり、そのアイテムがどれだけ価値があるかを表します。
- 1日の終わりに、システムはすべてのアイテムのこの2つの値を下げます。
とてもシンプルですよね? ここからが面白いところです。
- 販売期限が過ぎると、品質の低下が2倍の速さになります。
- アイテムの品質がマイナスになることはありません。
- **Aged Brie**は、古くなるほど品質が上がっていきます。
- アイテムの品質が50を超えることはありません。
- **Sulfuras**は伝説のアイテムなので販売期限がなく、品質は80で、決して下がりません。
- **Backstage passesは、Aged Brie**と同じく、販売期限が近づくほど品質が上がります。残りの日数が10日以下になると品質は2増え、5日以下になると3増えますが、コンサートが終わると品質は0になります。
1. リファクタリング
新しい機能を追加しやすくするために、既存のコードをリファクタリングして、変更しやすい形にしましょう。
すべてが正しく動作していれば(つまり、既存の機能のテストが引き続き通っていれば)、自由に変更を加えたり、新しいコードを追加したりしてかまいません。
注:アイテムは常に妥当な品質で始まるものと考えてかまいません。
言い換えると、自動テストは、アイテムの初期の品質が上限を超えている場合や、**Sulfuras**の初期の品質が80以外である場合に何が起こるかは確認しません。
2. 新しい機能の追加
最近、**Conjured**アイテムのサプライヤーと契約しました。
ここでの仕事は、次のルールをシステムに追加することです。
- **Conjuredのアイテム**は、販売期限が過ぎると品質が0になります。さらに、次のようになります。
- **Conjuredの普通のアイテム**は、Conjuredでない普通のアイテムよりも品質の低下が2倍の速さになります。
- **ConjuredのSulfuras**には、ConjuredでないSulfurasと違って販売期限があります。
- **ConjuredのBackstage passes**は、Conjuredでない場合よりも品質の上がり方が1だけ少なくなります。