梦游者/值对象

该软件包已被废弃,不再维护。作者建议使用 梦游者/domain 软件包代替。

用于实体的简单值对象实现。包括一些基本类型。

1.4.0 2019-01-03 17:45 UTC

This package is auto-updated.

Last update: 2020-02-03 17:24:30 UTC


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转换为字符串以避免类型错误。

链接