thepsion5/entities

用于管理实体和价值对象的一个简单库

dev-master 2014-06-12 14:10 UTC

This package is not auto-updated.

Last update: 2024-09-24 02:13:43 UTC


README

#Entities 一个简单的包,帮助管理实体和价值对象。

Build Status Coverage Status

##安装

thepsion5/entities 添加到 composer.json 中的依赖项

{
    "require": {
        "thepsion5/entity" : "dev-master"
    }
}

然后运行 composer update。

##Entities

将 EntityTrait 添加到相关类中

class User implements \Thepsion5\Entities\EntityInterface
{
    use \Thepsion5\Entities\EntityTrait;

    /* snip */
}

现在,您的 User 类将具有获取和设置 ID 的功能。如果没有通过 setId() 为此实体定义 ID,则将自动使用 PHP 的 uniqid 函数 生成一个新的 uuid。

##实体集合

GenericEntityCollection 类提供了一个简单的 API,用于创建和维护实体集合。实体将自动通过其 ID 索引。此外,还提供了抽象类 AbstractEntityCollection,以便可以创建类型提示的自定义实体类

class UserCollection extends AbstractEntityCollection
{

    public function __construct(array $users)
    {
        foreach($users as $user) {
            $this->add($user);
        }
    }

    public function add(UserEntity $user)
    {
        return $this->addEntity($user);
    }

    public function get($id)
    {
        return $this->getEntity($id);
    }

    public function has($entityOrId)
    {
        return $this->hasEntity($id);
    }
}

##价值对象

创建一个通用的价值对象(Value Object)就像创建一个类并使用正确的特质一样简单

class Title
{
    use \Thepsion5\Entities\Traits\SimpleValueObjectTrait;
}

使用它们同样简单

$title = new Title('This is a title');
$invalidTitle = new Title(''); //will throw an invalid argument exception
print $title; //converts the value back to a string

您也可以定义更复杂的规则来决定一个 VO 是否有效

class Email
{
    use \Thepsion5\Entities\Traits\SimpleValueObjectTrait;

    protected function isValid($email)
    {
        return filter_var($email, FILTER_VALIDATE_EMAIL);
    }

    protected function onInvalid($value)
    {
        throw new \InvalidArgumentException("The email [$value] is not a valid email address.");
    }
}

##枚举

提供了一个枚举特质(Enum trait),以简化枚举的实现和使用。所需做的只是定义表示枚举值的类常量,然后使用这个特质

class UserStatus
{
    use \Thepsion5\Entity\Traits\EnumTrait;

    const BANNED        = -1;
    const UNACTIVATED   = 1;
    const ACTIVATE      = 2;
}

UseStatus::toArray(); //['BANNED' => -1, 'UNACTIVATED' => 1, 'ACTIVATED' => 2]
$banned = UserStatus::BANNED();
$banned == new UserStatus(UserStatus::BANNED); //true
$banned->is('BANNED'); //true

##待办事项

  • 预定义的通用价值对象,用于常见用例