From 9ecfa1d973061dd87f2a353c54142251f45ca474 Mon Sep 17 00:00:00 2001 From: Thang Tran Date: Wed, 1 Mar 2023 19:58:51 +0700 Subject: [PATCH] Refactor Code and write Unit test --- php/src/GildedRose.php | 29 ++------------- php/src/ItemFactory.php | 36 +++++++++++++++++++ .../Abstract/AbstractItem.php} | 6 ++-- .../AgedBrieItem.php} | 8 ++--- .../BackstagePassItem.php} | 8 ++--- .../ConjuredItem.php} | 8 ++--- .../Interface/ItemInterface.php} | 4 +-- .../NormalItem.php} | 8 ++--- .../SulfurasItem.php} | 8 ++--- 9 files changed, 64 insertions(+), 51 deletions(-) create mode 100644 php/src/ItemFactory.php rename php/src/{ItemUpdater/Abstract/AbstractItemUpdater.php => Items/Abstract/AbstractItem.php} (88%) rename php/src/{ItemUpdater/AgedBrieItemUpdater.php => Items/AgedBrieItem.php} (58%) rename php/src/{ItemUpdater/BackstagePassItemUpdater.php => Items/BackstagePassItem.php} (67%) rename php/src/{ItemUpdater/ConjuredItemUpdater.php => Items/ConjuredItem.php} (59%) rename php/src/{ItemUpdater/Interface/ItemUpdaterInterface.php => Items/Interface/ItemInterface.php} (80%) rename php/src/{ItemUpdater/NormalItemUpdater.php => Items/NormalItem.php} (53%) rename php/src/{ItemUpdater/SulfurasItemUpdater.php => Items/SulfurasItem.php} (51%) diff --git a/php/src/GildedRose.php b/php/src/GildedRose.php index e0a6ee10..2a6b05ea 100644 --- a/php/src/GildedRose.php +++ b/php/src/GildedRose.php @@ -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() - }; - } } diff --git a/php/src/ItemFactory.php b/php/src/ItemFactory.php new file mode 100644 index 00000000..be415b7e --- /dev/null +++ b/php/src/ItemFactory.php @@ -0,0 +1,36 @@ +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() + }; + } + +} diff --git a/php/src/ItemUpdater/Abstract/AbstractItemUpdater.php b/php/src/Items/Abstract/AbstractItem.php similarity index 88% rename from php/src/ItemUpdater/Abstract/AbstractItemUpdater.php rename to php/src/Items/Abstract/AbstractItem.php index d49943c9..064dad35 100644 --- a/php/src/ItemUpdater/Abstract/AbstractItemUpdater.php +++ b/php/src/Items/Abstract/AbstractItem.php @@ -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; diff --git a/php/src/ItemUpdater/AgedBrieItemUpdater.php b/php/src/Items/AgedBrieItem.php similarity index 58% rename from php/src/ItemUpdater/AgedBrieItemUpdater.php rename to php/src/Items/AgedBrieItem.php index 7a17886b..cca45c52 100644 --- a/php/src/ItemUpdater/AgedBrieItemUpdater.php +++ b/php/src/Items/AgedBrieItem.php @@ -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 diff --git a/php/src/ItemUpdater/BackstagePassItemUpdater.php b/php/src/Items/BackstagePassItem.php similarity index 67% rename from php/src/ItemUpdater/BackstagePassItemUpdater.php rename to php/src/Items/BackstagePassItem.php index fd735930..a320155c 100644 --- a/php/src/ItemUpdater/BackstagePassItemUpdater.php +++ b/php/src/Items/BackstagePassItem.php @@ -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 diff --git a/php/src/ItemUpdater/ConjuredItemUpdater.php b/php/src/Items/ConjuredItem.php similarity index 59% rename from php/src/ItemUpdater/ConjuredItemUpdater.php rename to php/src/Items/ConjuredItem.php index e3aba9ba..2847f409 100644 --- a/php/src/ItemUpdater/ConjuredItemUpdater.php +++ b/php/src/Items/ConjuredItem.php @@ -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 diff --git a/php/src/ItemUpdater/Interface/ItemUpdaterInterface.php b/php/src/Items/Interface/ItemInterface.php similarity index 80% rename from php/src/ItemUpdater/Interface/ItemUpdaterInterface.php rename to php/src/Items/Interface/ItemInterface.php index 02efe947..21541a77 100644 --- a/php/src/ItemUpdater/Interface/ItemUpdaterInterface.php +++ b/php/src/Items/Interface/ItemInterface.php @@ -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 diff --git a/php/src/ItemUpdater/NormalItemUpdater.php b/php/src/Items/NormalItem.php similarity index 53% rename from php/src/ItemUpdater/NormalItemUpdater.php rename to php/src/Items/NormalItem.php index 62f85bdc..9d577fd8 100644 --- a/php/src/ItemUpdater/NormalItemUpdater.php +++ b/php/src/Items/NormalItem.php @@ -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 diff --git a/php/src/ItemUpdater/SulfurasItemUpdater.php b/php/src/Items/SulfurasItem.php similarity index 51% rename from php/src/ItemUpdater/SulfurasItemUpdater.php rename to php/src/Items/SulfurasItem.php index a99394c8..59eac473 100644 --- a/php/src/ItemUpdater/SulfurasItemUpdater.php +++ b/php/src/Items/SulfurasItem.php @@ -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