kelunik / builders
生成值对象的构建器。
v2.0.0
2019-06-18 22:11 UTC
Requires
- php: ^7.1
- nette/php-generator: ^3.2
- roave/better-reflection: ^3.2
Requires (Dev)
- phpunit/phpunit: ^7.5
This package is auto-updated.
Last update: 2024-09-06 07:48:17 UTC
README
此包允许自动生成值对象的构建器。一个用例是创建单元测试和集成测试的测试对象。
安装
composer require kelunik/builders
用法
给定以下User
对象,构建器生成器将生成一个UserBuilderMethods
类。
<?php namespace Example; class User { /** @var int|null */ private $id; /** @var string|null */ private $name; public function getId(): ?int { return $this->id; } public function setId(?string $id): void { $this->id = $id; } public function getName(): ?string { return $this->name; } public function setName(?string $name): void { $this->name = $name; } }
<?php namespace Example; use Example; class UserBuilderMethods implements \Kelunik\Builders\Builder { private $entity; public function __construct() { $this->entity = new Example\User; } final public function withId(?string $value) { $this->entity->setId($value); return $this; } final public function withName(?string $value) { $this->entity->setName($value); return $this; } final public function build(): Example\User { return $this->entity; } }
自定义构建器方法
为了使用生成的类,建议创建一个扩展生成的UserBuilderMethods
的UserBuilder
对象。这种分离允许你在不影响构建器生成器(当它丢弃旧的UserBuilderMethods
并生成一个新的)时添加自定义构建器方法。
<?php namespace Example; class UserBuilder extends UserBuilderMethods { public function root() { return $this->withId(1)->withName('root'); } }
构建器消费
如果添加一个定义函数为快捷方式的builders.php
,构建测试对象将变得非常容易。
<?php namespace Example; function user() { return new UserBuilder; }
<?php use Example\User; use function Example\user; require __DIR__ . '/../vendor/autoload.php'; $user = a(user()->root()->withName('kelunik')); var_dump($user instanceof User); var_dump($user);
代码生成
可以使用以下命令调用代码生成器,路径相对于composer根目录:
vendor/bin/builder-generator App\NamespaceOfValueObjects src src-generated