apie / value-objects
此包已被 废弃,不再维护。没有建议的替代包。
Apie 值对象
dev-main
2021-02-10 09:58 UTC
Requires (Dev)
- phpunit/phpunit: ^9.5
Suggests
- apie/openapi-schema: Add OpenAPI schema support to value objects.
This package is auto-updated.
Last update: 2022-06-12 09:56:34 UTC
README
此包是 Apie 库的一部分。代码在单一代码库中维护,因此需要将 PR 发送到 单一代码库
文档
此包在整个 Apie 库中用于创建值对象,但也可以在 Apie 之外使用。Apie 值对象实现了 ValueObjectInterface。ValueObjectInterface 有两个方法需要实现。一个静态的 fromNative 方法,用于从原始值创建值对象,一个 toNative 方法,用于将值对象转换回原始值。
除了这个接口之外,我们还有两个特质,用于创建简单的字符串和枚举值对象。
可用的类/接口。
ValueObjectInterface
实现 Apie 值对象的接口。fromNative 将原始值转换为值对象,toNative 将值对象转换回原始值。
ValueObjectCompareInterface
用于添加比较方法以进行相等性比较的接口,其中 $object->toNative() === $object2->toNative() 为 false,但对象的值对象相同。
StringTrait
用于创建表示为字符串的值对象。它实现了 ValueObjectInterface 上的所有方法,但您需要实现两个方法才能使其工作:一个用于验证输入,另一个用于清理输入。
class StringTraitExample implements ValueObjectInterface { use StringTrait; protected function validValue(string $value): bool { return !empty($value); } protected function sanitizeValue(string $value): string { return trim($value); } }
可以使用如下方式
$instance = new StringTraitExample(' example '); $instance->toNative(); // returns 'example' $instance2 = StringTraitExample::fromNative(' example '); // just calls the constructor. StringTraitExample::fromNative(''); // throws exception
StringEnumTrait
用于创建枚举值对象。
类示例
<?php class StringEnumTraitExample implements ValueObjectInterface { use StringEnumTrait; const A = 'OPTION_A'; const B = 'OPTION_B'; }
用法
<?php $instance = new StringEnumTraitExample('OPTION_A'); $instance->toNative(); //returns 'OPTION_A' $instance2 = StringEnumTraitExample::fromNative('OPTION_A'); // same as constructor call StringEnumTraitExample::fromNative('OPTION_C'); // throws exception