thepsion5 / entities
用于管理实体和价值对象的一个简单库
dev-master
2014-06-12 14:10 UTC
Requires
- php: >=5.4.0
Requires (Dev)
- phpunit/phpunit: 4.0.*
- satooshi/php-coveralls: dev-master
This package is not auto-updated.
Last update: 2024-09-24 02:13:43 UTC
README
#Entities 一个简单的包,帮助管理实体和价值对象。
##安装
将 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
##待办事项
- 预定义的通用价值对象,用于常见用例