tboileau / clean-architecture
此包已被废弃且不再维护。未建议替代包。
清洁架构库
1.4.3
2019-11-18 01:49 UTC
Requires
- php: ^7.1.3
- ext-ctype: *
- ext-iconv: *
- doctrine/annotations: 1.*
- symfony/dependency-injection: ~4.3
- symfony/options-resolver: ~4.3
Requires (Dev)
- phpunit/phpunit: ^8.4
README
安装
使用 composer 下载
composer require tboileau/clean-architecture "1.*"
创建新用例
创建您的请求并配置它
<?php namespace App\BusinessRules\Request; use Symfony\Component\OptionsResolver\OptionsResolver; use TBoileau\CleanArchitecture\BusinessRules\Request\Request; /** * Class FooRequest * @package App\BusinessRules\Request */ class FooRequest extends Request { /** * @inheritDoc */ public function configure(OptionsResolver $resolver): void { $resolver->setRequired("bar"); $resolver->setDefault("optional", "default_data"); } }
同样也针对您的响应
<?php namespace App\BusinessRules\Response; use Symfony\Component\OptionsResolver\OptionsResolver; use TBoileau\CleanArchitecture\BusinessRules\Response\Response; /** * Class ResponseStub * @package TBoileau\CleanArchitecture\Tests\BusinessRules\Response> */ class FooResponse extends Response { /** * @inheritDoc */ public function configure(OptionsResolver $resolver): void { $resolver->setRequired("bar"); $resolver->setDefault("optional", "default_data"); } }
现在,您可以实现您的新用例
<?php namespace App\BusinessRules\UseCase; use TBoileau\CleanArchitecture\BusinessRules\Annotation\UseCase; use TBoileau\CleanArchitecture\BusinessRules\Request\RequestInterface; use TBoileau\CleanArchitecture\BusinessRules\UseCase\UseCaseInterface; /** * Class Example * @package App\BusinessRules\UseCase * @UseCase( * request="App\BusinessRules\Request\FooRequest", * response="App\BusinessRules\Response\FooResponse" * ) */ class Example implements UseCaseInterface { /** * @inheritDoc */ public function execute(RequestInterface $request): array { return [ "bar" => "your_data", "optional" => $request->get("optional") ]; } }
用法
<?php namespace App\UserInterface\Controller; use App\BusinessRules\UseCase\Example; use TBoileau\CleanArchitecture\BusinessRules\Response\ResponseInterface; use TBoileau\CleanArchitecture\BusinessRules\UseCase\UseCaseFactoryInterface; /** * Class FooController * @package App\UserInterface\Controller */ class FooController extends AbstractController { public function __invoke(UseCaseFactoryInterface $useCaseFactory) { /** @var ResponseInterface $response */ $response = $useCaseFactory->execute(Example::class, ["bar" => "required data"]); } }