skrip42/strategy-bundle
Composer 安装命令:
composer require skrip42/strategy-bundle
包简介
strategy in symfony
README 文档
README
implement strategy and specification pattern in symfony
install:
- run
composer require skrip42/strategy-bundle
base usage:
strategy:
extends strategy manager:
namespace App\Services\Test; use Skrip42\Bundle\StrategyBundle\StrategyManagerAbstract; class TestStrategyManager extends StrategyManagerAbstract { }
implements strategy interface:
namespace App\Services\Test; use Skrip42\Bundle\StrategyBundle\StrategyInterface; abstract class TestStrategyAbstract implements StrategyInterface { abstract public function doSomething(); }
create strategies:
namespace App\Services\Test; class Strategy1 extends TestStrategyAbstract { public function doSomething() { ..... } } class Strategy2 extends TestStrategyAbstract { public function doSomething() { ..... } }
define:
App\Services\Test\TestStrategyManager: tags: [skrip42.strategy_manager] properties: strategy: strategy1: App\Services\Test\Strategy1 strategy2: App\Services\Test\Strategy2
and call strategy by name!
public function test(TestStrategyManager $manager): Response { $strategy = $manager->get('strategy1'); $anotherStrategy = $manager->get('strategy2'); }
specification:
extends strategy manager:
namespace App\Services\Test; use Skrip42\Bundle\StrategyBundle\StrategyManagerAbstract; class TestSpecificationManager extends SpecificationManagerAbstract { }
implements strategy interface:
namespace App\Services\Test; use Skrip42\Bundle\StrategyBundle\SpecificationInterface; abstract class TestSpecificationAbstract implements SpecificationInterface { abstract public function isStatisfiedBy($criteria) : bool; abstract public function doSomething(); }
create strategies:
namespace App\Services\Test; class Specification1 extends TestSpecificationAbstract { public function isStatisfiedBy($criteria) : bool { ...check condition } public function doSomething() { ..... } } class Specification2 extends TestSpecificationAbstract { public function isStatisfiedBy($criteria) : bool { ...check condition } public function doSomething() { ..... } }
define:
App\Services\Test\TestSpecificationManager: tags: [skrip42.specification_manager] properties: specification: strategy1: App\Services\Test\Specification1 strategy2: App\Services\Test\Specification2
and call specification!
public function test(TestSpecificationManager $manager): Response { $specification = $manager->getFirst($condition); //get the first specification that meets the condition $specification = $manager->getAll($condition); //get all specifications that meets the condition }
skrip42/strategy-bundle 适用场景与选型建议
skrip42/strategy-bundle 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 29 次下载、GitHub Stars 达 1, 最近一次更新时间为 2020 年 12 月 08 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 skrip42/strategy-bundle 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 skrip42/strategy-bundle 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 29
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2020-12-08