diff --git a/csharpcore/GildedRose/GildedRose.cs b/csharpcore/GildedRose/GildedRose.cs index 0a25ae91..74c37f1b 100644 --- a/csharpcore/GildedRose/GildedRose.cs +++ b/csharpcore/GildedRose/GildedRose.cs @@ -30,45 +30,42 @@ public class GildedRose private static bool IsRegularItem(Item item) => (!IsLegendaryItem(item) && !IsBackstagePassesItem(item) && !IsBetterWithAgeItem(item)); + + + private static void IncreaseQuality(Item item, int byValue) + { + item.Quality = int.Min(item.Quality + byValue, MaxQuality); + } - - - + private static void DecreaseQuality(Item item, int byValue) + { + item.Quality = int.Max(item.Quality - byValue, MinQuality); + } + + private void DailyItemUpdate(Item item) { if (IsLegendaryItem(item)) return; if (IsRegularItem(item)) { - if (item.Quality > MinQuality) - { - item.Quality = item.Quality - 1; - } + DecreaseQuality(item, 1); } if(IsBetterWithAgeItem(item) || IsBackstagePassesItem(item)) { - if (item.Quality < MaxQuality) + IncreaseQuality(item, 1); + + if (IsBackstagePassesItem(item)) { - item.Quality = item.Quality + 1; - - if (IsBackstagePassesItem(item)) + if (item.SellIn < 11) { - if (item.SellIn < 11) - { - if (item.Quality < MaxQuality) - { - item.Quality = item.Quality + 1; - } - } + IncreaseQuality(item, 1); + } - if (item.SellIn < 6) - { - if (item.Quality < MaxQuality) - { - item.Quality = item.Quality + 1; - } - } + if (item.SellIn < 6) + { + IncreaseQuality(item, 1); } } } @@ -79,23 +76,17 @@ public class GildedRose { if (IsRegularItem(item)) { - if (item.Quality > MinQuality) - { - item.Quality = item.Quality - 1; - } + DecreaseQuality(item, 1); } if(IsBackstagePassesItem(item)) { - item.Quality = item.Quality - item.Quality; + DecreaseQuality(item, item.Quality); } if(IsBetterWithAgeItem(item)) { - if (item.Quality < MaxQuality) - { - item.Quality = item.Quality + 1; - } + IncreaseQuality(item, 1); } } } diff --git a/csharpcore/GildedRose/RefactoringDiary.md b/csharpcore/GildedRose/RefactoringDiary.md index 50585b6c..a19b7d4f 100644 --- a/csharpcore/GildedRose/RefactoringDiary.md +++ b/csharpcore/GildedRose/RefactoringDiary.md @@ -11,6 +11,10 @@ NOTES: Some of the tests failed due to bugs I discovered in the code/existing tests (e.g. relying on exact name instead of the mentioned "code word"). I decorated these tests with `[Ignore]` until I get to a stage in the refactoring where I can easily fix the issues and re-introduce the tests. 2. small refactorings of the UpdateQuality() method to make it more readable and separate the different (unrelated) handling of the different types.
+3. Extract Increasing/Decreasing Quality into a method.
+It feels like Quality should have been a TinyType that manages its own limits. However, since we're not allowed to change Item, I'm just extracting a method. + + This is the state of the code now