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;
|
||||
|
||||
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
|
||||
{
|
||||
/**
|
||||
@ -27,25 +20,9 @@ final class GildedRose
|
||||
public function updateQuality(): void
|
||||
{
|
||||
foreach ($this->items as $item) {
|
||||
$itemUpdater = $this->getItemUpdater($item);
|
||||
$itemUpdater->updateSellIn($item);
|
||||
$itemUpdater->updateQuality($item);
|
||||
$itemInstance = ItemFactory::createItem($item);
|
||||
$itemInstance->updateSellIn($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);
|
||||
|
||||
namespace GildedRose\ItemUpdater\Abstract;
|
||||
namespace GildedRose\Items\Abstract;
|
||||
|
||||
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 MAX_QUALITY = 50;
|
||||
@ -2,13 +2,13 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace GildedRose\ItemUpdater;
|
||||
namespace GildedRose\Items;
|
||||
|
||||
use GildedRose\Item;
|
||||
use GildedRose\ItemUpdater\Abstract\AbstractItemUpdater;
|
||||
use GildedRose\ItemUpdater\Interface\ItemUpdaterInterface;
|
||||
use GildedRose\Items\Abstract\AbstractItem;
|
||||
use GildedRose\Items\Interface\ItemInterface;
|
||||
|
||||
class AgedBrieItemUpdater extends AbstractItemUpdater implements ItemUpdaterInterface
|
||||
class AgedBrieItem extends AbstractItem implements ItemInterface
|
||||
{
|
||||
/**
|
||||
* @param Item $item
|
||||
@ -2,13 +2,13 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace GildedRose\ItemUpdater;
|
||||
namespace GildedRose\Items;
|
||||
|
||||
use GildedRose\Item;
|
||||
use GildedRose\ItemUpdater\Abstract\AbstractItemUpdater;
|
||||
use GildedRose\ItemUpdater\Interface\ItemUpdaterInterface;
|
||||
use GildedRose\Items\Abstract\AbstractItem;
|
||||
use GildedRose\Items\Interface\ItemInterface;
|
||||
|
||||
class BackstagePassItemUpdater extends AbstractItemUpdater implements ItemUpdaterInterface
|
||||
class BackstagePassItem extends AbstractItem implements ItemInterface
|
||||
{
|
||||
/**
|
||||
* @param Item $item
|
||||
@ -2,13 +2,13 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace GildedRose\ItemUpdater;
|
||||
namespace GildedRose\Items;
|
||||
|
||||
use GildedRose\Item;
|
||||
use GildedRose\ItemUpdater\Abstract\AbstractItemUpdater;
|
||||
use GildedRose\ItemUpdater\Interface\ItemUpdaterInterface;
|
||||
use GildedRose\Items\Abstract\AbstractItem;
|
||||
use GildedRose\Items\Interface\ItemInterface;
|
||||
|
||||
class ConjuredItemUpdater extends AbstractItemUpdater implements ItemUpdaterInterface
|
||||
class ConjuredItem extends AbstractItem implements ItemInterface
|
||||
{
|
||||
/**
|
||||
* @param Item $item
|
||||
@ -2,11 +2,11 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace GildedRose\ItemUpdater\Interface;
|
||||
namespace GildedRose\Items\Interface;
|
||||
|
||||
use GildedRose\Item;
|
||||
|
||||
interface ItemUpdaterInterface
|
||||
interface ItemInterface
|
||||
{
|
||||
/**
|
||||
* @param Item $item
|
||||
@ -2,13 +2,13 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace GildedRose\ItemUpdater;
|
||||
namespace GildedRose\Items;
|
||||
|
||||
use GildedRose\Item;
|
||||
use GildedRose\ItemUpdater\Abstract\AbstractItemUpdater;
|
||||
use GildedRose\ItemUpdater\Interface\ItemUpdaterInterface;
|
||||
use GildedRose\Items\Abstract\AbstractItem;
|
||||
use GildedRose\Items\Interface\ItemInterface;
|
||||
|
||||
class NormalItemUpdater extends AbstractItemUpdater implements ItemUpdaterInterface
|
||||
class NormalItem extends AbstractItem implements ItemInterface
|
||||
{
|
||||
/**
|
||||
* @param Item $item
|
||||
@ -2,13 +2,13 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace GildedRose\ItemUpdater;
|
||||
namespace GildedRose\Items;
|
||||
|
||||
use GildedRose\Item;
|
||||
use GildedRose\ItemUpdater\Abstract\AbstractItemUpdater;
|
||||
use GildedRose\ItemUpdater\Interface\ItemUpdaterInterface;
|
||||
use GildedRose\Items\Abstract\AbstractItem;
|
||||
use GildedRose\Items\Interface\ItemInterface;
|
||||
|
||||
class SulfurasItemUpdater extends AbstractItemUpdater implements ItemUpdaterInterface
|
||||
class SulfurasItem extends AbstractItem implements ItemInterface
|
||||
{
|
||||
/**
|
||||
* @param Item $item
|
||||
Loading…
Reference in New Issue
Block a user