mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-15 22:41:30 +00:00
Refactor Code and write Unit test
This commit is contained in:
parent
b0b603fdc1
commit
9ecfa1d973
@ -4,13 +4,6 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace GildedRose;
|
namespace GildedRose;
|
||||||
|
|
||||||
use GildedRose\ItemUpdater\Interface\ItemUpdaterInterface;
|
|
||||||
use GildedRose\ItemUpdater\AgedBrieItemUpdater;
|
|
||||||
use GildedRose\ItemUpdater\BackstagePassItemUpdater;
|
|
||||||
use GildedRose\ItemUpdater\ConjuredItemUpdater;
|
|
||||||
use GildedRose\ItemUpdater\NormalItemUpdater;
|
|
||||||
use GildedRose\ItemUpdater\SulfurasItemUpdater;
|
|
||||||
|
|
||||||
final class GildedRose
|
final class GildedRose
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
@ -27,25 +20,9 @@ final class GildedRose
|
|||||||
public function updateQuality(): void
|
public function updateQuality(): void
|
||||||
{
|
{
|
||||||
foreach ($this->items as $item) {
|
foreach ($this->items as $item) {
|
||||||
$itemUpdater = $this->getItemUpdater($item);
|
$itemInstance = ItemFactory::createItem($item);
|
||||||
$itemUpdater->updateSellIn($item);
|
$itemInstance->updateSellIn($item);
|
||||||
$itemUpdater->updateQuality($item);
|
$itemInstance->updateQuality($item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param Item $item
|
|
||||||
*
|
|
||||||
* @return ItemUpdaterInterface
|
|
||||||
*/
|
|
||||||
private function getItemUpdater(Item $item): ItemUpdaterInterface
|
|
||||||
{
|
|
||||||
return match(true) {
|
|
||||||
strpos($item->name, 'Aged Brie') !== false => new AgedBrieItemUpdater(),
|
|
||||||
strpos($item->name, 'Backstage') !== false => new BackstagePassItemUpdater(),
|
|
||||||
strpos($item->name, 'Sulfuras') !== false => new SulfurasItemUpdater(),
|
|
||||||
strpos($item->name, 'Conjured') !== false => new ConjuredItemUpdater(),
|
|
||||||
default => new NormalItemUpdater()
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
36
php/src/ItemFactory.php
Normal file
36
php/src/ItemFactory.php
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace GildedRose;
|
||||||
|
|
||||||
|
use GildedRose\Items\Interface\ItemInterface;
|
||||||
|
use GildedRose\Items\AgedBrieItem;
|
||||||
|
use GildedRose\Items\BackstagePassItem;
|
||||||
|
use GildedRose\Items\ConjuredItem;
|
||||||
|
use GildedRose\Items\NormalItem;
|
||||||
|
use GildedRose\Items\SulfurasItem;
|
||||||
|
class ItemFactory
|
||||||
|
{
|
||||||
|
public const AGED_BRIE_ITEM = 'Aged Brie';
|
||||||
|
public const BACKSTAGE_ITEM = 'Backstage';
|
||||||
|
public const SULFURAS_ITEM = 'Sulfuras';
|
||||||
|
public const CONJURED_ITEM = 'Conjured';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Item $item
|
||||||
|
*
|
||||||
|
* @return ItemInterface
|
||||||
|
*/
|
||||||
|
public static function createItem(Item $item): ItemInterface
|
||||||
|
{
|
||||||
|
return match(true) {
|
||||||
|
strpos($item->name, self::AGED_BRIE_ITEM) !== false => new AgedBrieItem(),
|
||||||
|
strpos($item->name, self::BACKSTAGE_ITEM) !== false => new BackstagePassItem(),
|
||||||
|
strpos($item->name, self::SULFURAS_ITEM) !== false => new SulfurasItem(),
|
||||||
|
strpos($item->name, self::CONJURED_ITEM) !== false => new ConjuredItem(),
|
||||||
|
default => new NormalItem()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -2,12 +2,12 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace GildedRose\ItemUpdater\Abstract;
|
namespace GildedRose\Items\Abstract;
|
||||||
|
|
||||||
use GildedRose\Item;
|
use GildedRose\Item;
|
||||||
use GildedRose\ItemUpdater\Interface\ItemUpdaterInterface;
|
use GildedRose\Items\Interface\ItemInterface;
|
||||||
|
|
||||||
abstract class AbstractItemUpdater implements ItemUpdaterInterface
|
abstract class AbstractItem implements ItemInterface
|
||||||
{
|
{
|
||||||
private const MIN_QUALITY = 0;
|
private const MIN_QUALITY = 0;
|
||||||
private const MAX_QUALITY = 50;
|
private const MAX_QUALITY = 50;
|
||||||
@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace GildedRose\ItemUpdater;
|
namespace GildedRose\Items;
|
||||||
|
|
||||||
use GildedRose\Item;
|
use GildedRose\Item;
|
||||||
use GildedRose\ItemUpdater\Abstract\AbstractItemUpdater;
|
use GildedRose\Items\Abstract\AbstractItem;
|
||||||
use GildedRose\ItemUpdater\Interface\ItemUpdaterInterface;
|
use GildedRose\Items\Interface\ItemInterface;
|
||||||
|
|
||||||
class AgedBrieItemUpdater extends AbstractItemUpdater implements ItemUpdaterInterface
|
class AgedBrieItem extends AbstractItem implements ItemInterface
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @param Item $item
|
* @param Item $item
|
||||||
@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace GildedRose\ItemUpdater;
|
namespace GildedRose\Items;
|
||||||
|
|
||||||
use GildedRose\Item;
|
use GildedRose\Item;
|
||||||
use GildedRose\ItemUpdater\Abstract\AbstractItemUpdater;
|
use GildedRose\Items\Abstract\AbstractItem;
|
||||||
use GildedRose\ItemUpdater\Interface\ItemUpdaterInterface;
|
use GildedRose\Items\Interface\ItemInterface;
|
||||||
|
|
||||||
class BackstagePassItemUpdater extends AbstractItemUpdater implements ItemUpdaterInterface
|
class BackstagePassItem extends AbstractItem implements ItemInterface
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @param Item $item
|
* @param Item $item
|
||||||
@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace GildedRose\ItemUpdater;
|
namespace GildedRose\Items;
|
||||||
|
|
||||||
use GildedRose\Item;
|
use GildedRose\Item;
|
||||||
use GildedRose\ItemUpdater\Abstract\AbstractItemUpdater;
|
use GildedRose\Items\Abstract\AbstractItem;
|
||||||
use GildedRose\ItemUpdater\Interface\ItemUpdaterInterface;
|
use GildedRose\Items\Interface\ItemInterface;
|
||||||
|
|
||||||
class ConjuredItemUpdater extends AbstractItemUpdater implements ItemUpdaterInterface
|
class ConjuredItem extends AbstractItem implements ItemInterface
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @param Item $item
|
* @param Item $item
|
||||||
@ -2,11 +2,11 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace GildedRose\ItemUpdater\Interface;
|
namespace GildedRose\Items\Interface;
|
||||||
|
|
||||||
use GildedRose\Item;
|
use GildedRose\Item;
|
||||||
|
|
||||||
interface ItemUpdaterInterface
|
interface ItemInterface
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @param Item $item
|
* @param Item $item
|
||||||
@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace GildedRose\ItemUpdater;
|
namespace GildedRose\Items;
|
||||||
|
|
||||||
use GildedRose\Item;
|
use GildedRose\Item;
|
||||||
use GildedRose\ItemUpdater\Abstract\AbstractItemUpdater;
|
use GildedRose\Items\Abstract\AbstractItem;
|
||||||
use GildedRose\ItemUpdater\Interface\ItemUpdaterInterface;
|
use GildedRose\Items\Interface\ItemInterface;
|
||||||
|
|
||||||
class NormalItemUpdater extends AbstractItemUpdater implements ItemUpdaterInterface
|
class NormalItem extends AbstractItem implements ItemInterface
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @param Item $item
|
* @param Item $item
|
||||||
@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace GildedRose\ItemUpdater;
|
namespace GildedRose\Items;
|
||||||
|
|
||||||
use GildedRose\Item;
|
use GildedRose\Item;
|
||||||
use GildedRose\ItemUpdater\Abstract\AbstractItemUpdater;
|
use GildedRose\Items\Abstract\AbstractItem;
|
||||||
use GildedRose\ItemUpdater\Interface\ItemUpdaterInterface;
|
use GildedRose\Items\Interface\ItemInterface;
|
||||||
|
|
||||||
class SulfurasItemUpdater extends AbstractItemUpdater implements ItemUpdaterInterface
|
class SulfurasItem extends AbstractItem implements ItemInterface
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @param Item $item
|
* @param Item $item
|
||||||
Loading…
Reference in New Issue
Block a user