ohtyap/value-object

值对象的基库

1.0.0-alpha1 2021-02-16 21:32 UTC

This package is auto-updated.

Last update: 2024-09-18 04:31:37 UTC


README

值对象的基库。

Type Coverage Mutation testing badge Codecov

PHP from Packagist Packagist Version Packagist Version (including pre-releases)

安装

您可以通过 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()

此方法应返回应用层可以理解的价值。在大多数情况下,这些是基本类型,如 intstring,但也可能是更复杂类型,如 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)。请参阅 许可证文件 了解更多信息。