mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-14 22:21:20 +00:00
Extract item types and quality into their own classes to allow reuse
This commit is contained in:
parent
9293c86c66
commit
5e5d6e9fa7
@ -4,9 +4,6 @@ namespace GildedRoseKata;
|
||||
|
||||
public abstract class DailyUpdater
|
||||
{
|
||||
private const int MinQuality = 0;
|
||||
private const int MaxQuality = 50;
|
||||
|
||||
public void DailyUpdate(Item item)
|
||||
{
|
||||
UpdateSellIn(item);
|
||||
@ -24,12 +21,12 @@ public abstract class DailyUpdater
|
||||
|
||||
protected static void IncreaseQuality(Item item, int byValue = 1)
|
||||
{
|
||||
item.Quality = int.Min(item.Quality + byValue, MaxQuality);
|
||||
item.Quality = int.Min(item.Quality + byValue, ItemQuality.MaxQuality);
|
||||
}
|
||||
|
||||
protected static void DecreaseQuality(Item item, int byValue = 1)
|
||||
{
|
||||
item.Quality = int.Max(item.Quality - byValue, MinQuality);
|
||||
item.Quality = int.Max(item.Quality - byValue, ItemQuality.MinQuality);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -5,37 +5,30 @@ namespace GildedRoseKata;
|
||||
|
||||
public class DailyUpdaterFactory
|
||||
{
|
||||
private enum ItemType
|
||||
{
|
||||
Regular,
|
||||
Legendary,
|
||||
BetterWithAge,
|
||||
BackstagePasses
|
||||
}
|
||||
|
||||
private readonly Dictionary<ItemType, DailyUpdater> _dailyUpdaters = new();
|
||||
|
||||
private readonly Dictionary<ItemType.ItemKey, DailyUpdater> _dailyUpdaters = new();
|
||||
|
||||
public DailyUpdater GetDailyUpdater(Item item)
|
||||
{
|
||||
if (IsLegendaryItem(item))
|
||||
if (ItemType.IsLegendaryItem(item))
|
||||
{
|
||||
return GetOrCreateDailyUpdater(ItemType.Legendary, () => new DailyUpdaterForLegendaryItems());
|
||||
return GetOrCreateDailyUpdater(ItemType.ItemKey.Legendary, () => new DailyUpdaterForLegendaryItems());
|
||||
}
|
||||
|
||||
if (IsBetterWithAgeItem(item))
|
||||
if (ItemType.IsBetterWithAgeItem(item))
|
||||
{
|
||||
return GetOrCreateDailyUpdater(ItemType.BetterWithAge, () => new DailyUpdaterForBetterWithAgeItems());
|
||||
return GetOrCreateDailyUpdater(ItemType.ItemKey.BetterWithAge, () => new DailyUpdaterForBetterWithAgeItems());
|
||||
}
|
||||
|
||||
if(IsBackstagePassesItem(item))
|
||||
if(ItemType.IsBackstagePassesItem(item))
|
||||
{
|
||||
return GetOrCreateDailyUpdater(ItemType.BackstagePasses, () => new DailyUpdaterForBackstagePassesItems());
|
||||
return GetOrCreateDailyUpdater(ItemType.ItemKey.BackstagePasses, () => new DailyUpdaterForBackstagePassesItems());
|
||||
}
|
||||
|
||||
return GetOrCreateDailyUpdater(ItemType.Regular, () => new DailyUpdaterForRegularItems());
|
||||
return GetOrCreateDailyUpdater(ItemType.ItemKey.Regular, () => new DailyUpdaterForRegularItems());
|
||||
}
|
||||
|
||||
private DailyUpdater GetOrCreateDailyUpdater(ItemType itemType, Func<DailyUpdater> createDailyUpdater)
|
||||
private DailyUpdater GetOrCreateDailyUpdater(ItemType.ItemKey itemType, Func<DailyUpdater> createDailyUpdater)
|
||||
{
|
||||
if (!_dailyUpdaters.ContainsKey(itemType))
|
||||
{
|
||||
@ -44,11 +37,4 @@ public class DailyUpdaterFactory
|
||||
|
||||
return _dailyUpdaters[itemType];
|
||||
}
|
||||
|
||||
private static bool IsLegendaryItem(Item item) => item.Name.ToLower().Contains("sulfuras");
|
||||
|
||||
private static bool IsBackstagePassesItem(Item item) => item.Name.ToLower().Contains("backstage passes");
|
||||
|
||||
private static bool IsBetterWithAgeItem(Item item) => item.Name.ToLower().Equals("aged brie");
|
||||
|
||||
}
|
||||
9
csharpcore/GildedRose/ItemQuality.cs
Normal file
9
csharpcore/GildedRose/ItemQuality.cs
Normal file
@ -0,0 +1,9 @@
|
||||
namespace GildedRoseKata;
|
||||
|
||||
public static class ItemQuality
|
||||
{
|
||||
public const int MinQuality = 0;
|
||||
public const int MaxQuality = 50;
|
||||
public const int LegendaryItemQuality = 80;
|
||||
|
||||
}
|
||||
20
csharpcore/GildedRose/ItemType.cs
Normal file
20
csharpcore/GildedRose/ItemType.cs
Normal file
@ -0,0 +1,20 @@
|
||||
namespace GildedRoseKata;
|
||||
|
||||
public static class ItemType
|
||||
{
|
||||
public enum ItemKey
|
||||
{
|
||||
Regular,
|
||||
Legendary,
|
||||
BetterWithAge,
|
||||
BackstagePasses
|
||||
}
|
||||
|
||||
public static bool IsLegendaryItem(Item item) => IsLegendaryItem(item.Name);
|
||||
public static bool IsLegendaryItem(string name) => name.ToLower().Contains("sulfuras");
|
||||
|
||||
public static bool IsBackstagePassesItem(Item item) => item.Name.ToLower().Contains("backstage passes");
|
||||
|
||||
public static bool IsBetterWithAgeItem(Item item) => item.Name.ToLower().Equals("aged brie");
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user