apie/value-objects

此包已被 废弃,不再维护。没有建议的替代包。

Apie 值对象

dev-main 2021-02-10 09:58 UTC

This package is auto-updated.

Last update: 2022-06-12 09:56:34 UTC


README

Scrutinizer Code Quality Build Status

此包是 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