refactor: collapse UpdateQuality to delegate to the factory

GildedRose now resolves each item to its strategy and applies it; all
rules live in the strategies. The original one-arg constructor keeps
working by delegating to ItemUpdaterFactory.Default(); a second
constructor allows injecting a custom IItemUpdaterFactory.

No behaviour change: the ThirtyDays approval snapshot and all
existing-type spec tests pass unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Artur Goloyad 2026-07-25 20:50:46 +02:00
parent 8965637f18
commit 4074da89e3

View File

@ -1,89 +1,25 @@
using System.Collections.Generic;
using System.Collections.Generic;
namespace GildedRoseKata;
public class GildedRose
{
IList<Item> Items;
private readonly IList<Item> _items;
private readonly IItemUpdaterFactory _factory;
public GildedRose(IList<Item> Items)
public GildedRose(IList<Item> items) : this(items, ItemUpdaterFactory.Default())
{
this.Items = Items;
}
public GildedRose(IList<Item> items, IItemUpdaterFactory factory)
{
_items = items;
_factory = factory;
}
public void UpdateQuality()
{
for (var i = 0; i < Items.Count; i++)
{
if (Items[i].Name != "Aged Brie" && Items[i].Name != "Backstage passes to a TAFKAL80ETC concert")
{
if (Items[i].Quality > 0)
{
if (Items[i].Name != "Sulfuras, Hand of Ragnaros")
{
Items[i].Quality = Items[i].Quality - 1;
}
}
}
else
{
if (Items[i].Quality < 50)
{
Items[i].Quality = Items[i].Quality + 1;
if (Items[i].Name == "Backstage passes to a TAFKAL80ETC concert")
{
if (Items[i].SellIn < 11)
{
if (Items[i].Quality < 50)
{
Items[i].Quality = Items[i].Quality + 1;
}
}
if (Items[i].SellIn < 6)
{
if (Items[i].Quality < 50)
{
Items[i].Quality = Items[i].Quality + 1;
}
}
}
}
}
if (Items[i].Name != "Sulfuras, Hand of Ragnaros")
{
Items[i].SellIn = Items[i].SellIn - 1;
}
if (Items[i].SellIn < 0)
{
if (Items[i].Name != "Aged Brie")
{
if (Items[i].Name != "Backstage passes to a TAFKAL80ETC concert")
{
if (Items[i].Quality > 0)
{
if (Items[i].Name != "Sulfuras, Hand of Ragnaros")
{
Items[i].Quality = Items[i].Quality - 1;
}
}
}
else
{
Items[i].Quality = Items[i].Quality - Items[i].Quality;
}
}
else
{
if (Items[i].Quality < 50)
{
Items[i].Quality = Items[i].Quality + 1;
}
}
}
}
foreach (var item in _items)
_factory.Get(item).Update(item);
}
}
}