prodigeris / php-gilded-rose-refactoring-kata
我的PHP解决方案——GildedRose重构Kata。
v1.1
2019-02-04 21:55 UTC
Requires
- php: ^7.1
Requires (Dev)
- phpunit/phpunit: ^7
This package is auto-updated.
Last update: 2024-09-05 19:32:30 UTC
README
需求
php: 7.1或以上
安装
composer require prodigeris/php-gilded-rose-refactoring-kata
使用方法
如果你不使用容器
<?php $sulfuras = new \GildedRose\Item('Sulfuras, Hand of Ragnaros', 80, 2); $regularItem = new \GildedRose\Item('AK-47, Hand of Ragnaros', 10, 2); $backstagePass = new \GildedRose\Item('Backstage passes to a TAFKAL80ETC concert', 10, 2); $items = compact('sulfuras', 'regularItem', 'backstagePass'); $productFactoryRegistry = new \GildedRose\ProductFactoryRegistry(); $productFactoryRegistry->register(\GildedRose\Products\RegularProduct::class); $productFactoryRegistry->register(\GildedRose\Products\Sulfuras::class); $productFactoryRegistry->register(\GildedRose\Products\BackstagePass::class); $productFactory = new \GildedRose\ProductFactory($productFactoryRegistry); $gildedRose = new \GildedRose\GildedRose($items, $productFactory); $gildedRose->updateQuality();
测试
只需运行phpunit以执行所有测试。
描述
这是我针对Gilded Rose重构Kata的PHP解决方案,由Terry Hughes编写。
这很有趣;我成功使用了几个设计模式。
- 抽象工厂模式用于构建
Products(Items的实现) - 装饰者模式用于修改
Products的Item值。 - 命令模式用于根据规则修改
Item值。
产品
关于Product的所有内容都可以动态设置。
- 特质
HasDayRangeMultiplier。如果产品的质量随时间变化而不同。默认使用。Expires。如果产品的质量在销售日期后变为零(例如BackstagePass)。
- 属性
- const
name。由ProductFactory识别产品的名称。默认值:empty max_quality。确定质量的最大值。默认值:50min_quality。确定质量的最小值。默认值:0quality_step。确定质量随时间变化的方向和速度。默认值:-1day_range_multiplier。确定质量如何根据天数起作用。默认值:[0 => 2],这意味着在销售日期之后,质量步长是两倍。
- const
- 公共方法
update。为新产品更新Item。getItem。返回分配给产品的Item。getMaxQualitygetMinQualitygetQualityStep。返回考虑了乘数后的质量步长。getNewQuality。返回下一天的质量。警告:它不考虑规则。规则在属性更改时进行检查。isAfterSale。返回产品是否已过销售日期
新产品
如果您想引入新产品,请首先在Products目录中创建一个类。
例如。
<?php namespace GildedRose\Products; use GildedRose\Product; /** * Class Conjured * * @package \GildedRose\Products */ class Conjured extends Product { /** * The name of the product */ const NAME = 'Conjured Mana Cake'; /** * Quality increases by 2 over time * * @var int */ protected static $quality_step = -2; }
然后在ProductFactoryRegistry的容器中注册。
$productFactoryRegistry->register(Conjured::class);
好了!