梦游者 / 值对象
1.4.0
2019-01-03 17:45 UTC
Requires
- php: >=7
- ext-mbstring: *
- beberlei/assert: ~3.0
- eloquent/enumeration: ~5.1
- somnambulist/collection: ~2.1
Requires (Dev)
- phpunit/phpunit: ~7.0
- ramsey/uuid: ~3.7
Suggests
README
此存储库已被存档。请更新到组合包。
值对象库
值对象(VO)是不可变域对象,代表域模型中的某些值,但没有连续的标识符,即它们的标识符是通过它们的属性来确定的。VO允许您的实体封装属性并提供类型安全。
此库提供了一个抽象基类,提供了基本相等性测试和VO的基础,以及一些基本类型。由于VO是您域的一部分,您应该根据您的域命名(例如,如果您不将电子邮件地址称为EmailAddress,则为您自己的目的创建自己的VO)来实现您域所需的VO。
VO应在构建期间进行自我验证。为此目的,使用了Benjamin Eberlei的Assertion库,但您可能希望使用另一个或直接使用filter_var()等。
如果您发现缺少某些内容或有其他方法的建议,请提交PR或工单。
要求
- PHP 7+
- mb_string
- beberlei/assert
- eloquent/enumeration
- somnambulist/collection
安装
使用composer安装,或从github.com检查/提取文件。
- composer require somnambulist/value-objects
使用
扩展抽象值对象并实现单个必需方法toString()。默认相等性方法(equals())使用反射在VO属性上,并直接比较它们 - 只在VO类型之间。
例如
use Assert\Assert; use Somnambulist\ValueObjects\AbstractValueObject; class Uuid extends AbstractValueObject { /** * @var string */ private $uuid; /** * Constructor. * * @param string $uuid */ public function __construct(string $uuid) { Assert::that($uuid, null, 'uuid')->notEmpty()->uuid(); $this->uuid = $uuid; } /** * @return string */ public function toString(): string { return $this->uuid; } } $uuid = new Uuid(\Ramsey\Uuid\Uuid::uuid4());
与Doctrine的使用
这些VO可以作为Doctrine中的嵌入对象使用 - 但是如果VO允许为null,它将被实例化为空,因此您的methods / toString()应该处理这种情况,例如。
当Doctrine填充User时,具有可空Profile VO的用户,Profile VO也将被填充但为空,因此如果Profile有nickname()或avatar()方法,这些方法必须支持返回null,并且您的toString()方法必须将null转换为字符串以避免类型错误。