ohtyap / value-object
值对象的基库
1.0.0-alpha1
2021-02-16 21:32 UTC
Requires
- php: ^8.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^v2.17.3
- infection/infection: ^0.20.2
- php-coveralls/php-coveralls: ^v2.4.3
- phpstan/phpstan: ^0.12.64
- phpstan/phpstan-phpunit: ^0.12.17
- phpstan/phpstan-strict-rules: ^0.12.7
- phpunit/phpunit: ^9.5
- vimeo/psalm: ^4.3.1
This package is auto-updated.
Last update: 2024-09-18 04:31:37 UTC
README
值对象的基库。
安装
您可以通过 composer 安装此包
composer require ohtyap/value-object
通用接口
此存储库的主要目的是提供值对象的通用接口,这对于您需要将数据从外部(您的框架、ORM 等)转换为您的领域层(您想使用值对象的地方)以及相反的情况非常有用。
ValueObjectInterface
ValueObjectInterface
声明了一个类作为值对象。唯一必需的两个方法是 equals()
和 value()
。
equals()
值对象因其属性的值而相等。这意味着以下通常在处理值对象时不会工作
(new ValueObject('value')) === (new ValueObject('value')); (new ValueObject(new DateTime('2020-12-12'))) == (new ValueObject(new DateTime('2020-12-12'))); (new ValueObject('value')) == 'value';
equals()
允许基于值的含义进行比较,而不是基于类型或同一类的实例。
value()
此方法应返回应用层可以理解的价值。在大多数情况下,这些是基本类型,如 int
或 string
,但也可能是更复杂类型,如 array
或 \DateTime
。
TransformableInterface
要将变量转换为值对象,您需要通过 TransformableInterface::transform()
对变量进行转换。
$emailValueObj = YourEmailValueObject::transform('example@php.net');
Transformer
为了避免直接使用 TransformableInterface
,您可以使用转换器。
$transformer = new Transformer(); $emailValueObj = $transformer->transformValue(YourEmailValueObject::class, 'example@php.net');
使用 add()
提供值对象转换。您还可以为值对象注册不同的可转换项
$transformer = new Transformer(); $transformer->addType(YourEmailValueObject::class, CustomEmailTransformable::class);
在需要将值集(数组)转换为值对象的可重复使用方式的情况下,可以添加模式
$schema = new Schema('user'); $schema->addProperty('id', MyUuidValueObject::class); $schema->addProperty('email', MyEmailValueObject::class); $transformer = new Transformer(); $transformer->addSchema($schema); $result = $transformer->transformBySchema('user', ['id' => 'bd24e386-754d-4a8d-8c82-9d9be47220e9', 'email' => 'example@php.net']);
测试
composer run phpunit composer run psalm composer run phpstan composer run infection
更改日志
请参阅 CHANGELOG 了解最近更改的更多信息。
安全
如果您发现任何安全相关的问题,请通过电子邮件 security@tpa.codes 而不是使用问题跟踪器。
许可证
MIT 许可证(MIT)。请参阅 许可证文件 了解更多信息。