lhellemons / php-value-objects
实现真正的PHP值对象的类、特性和接口
1.1.0
2019-04-15 15:44 UTC
Requires
- php: ^7.1
- ext-json: *
Requires (Dev)
- phpunit/phpunit: ^7.3
This package is auto-updated.
Last update: 2024-09-18 22:22:48 UTC
README
作者:Laurens Hellemons lhellemons@gmail.com
此库包含用于处理PHP中的值对象的实用类、特性和接口。通过使用这些,您可以轻松定义自己的值对象。
阅读完整的文档这里。
为什么要使用值对象?
值对象是领域驱动设计(DDD)的核心组件。它们是没有标识符的对象,而是由它们的值定义的。任何处理领域概念的复杂系统最终都需要将某些概念建模为值对象。这些概念的例子包括
- 日期
- 货币金额
- 坐标
- 地址
- 物理量,如年龄、长度或重量
此库有助于绕过PHP对值对象的有限支持。通过使用此包提供的类、接口和特性,您可以创建自己的值对象,而无需担心内部实现。
用法
使用composer安装此包。
composer require lhellemons/php-value-objects
然后,在您的设计中使用这些类或特性。
<?php use SolidPhp\ValueObjects\Enum\EnumTrait; final class Weekday { use EnumTrait; public static function MONDAY(): self { return self::define('MONDAY'); } public static function TUESDAY(): self { return self::define('TUESDAY'); } // ... } // ... $monday = Weekday::MONDAY(); $tuesday = Weekday::TUESDAY(); $deliveryDay = WeekDay::MONDAY(); $monday === $deliveryDay; // true $monday === $tuesday; // false
use SolidPhp\ValueObjects\Value\ValueObjectTrait; final class EmailAddress { use ValueObjectTrait; /** @var string */ private $emailAddressString; private function __construct(string $emailAddressString) { $this->emailAddressString = $emailAddressString; } public function of(string $emailAddressString): self { $normalizedString = strtolower(trim($emailAddressString)); return static::getInstance($normalizedString); } public function getString(): string { return $this->emailAddressString; } } // ... $emailAddress = EmailAddress::of("annie@email.com"); $sameEmailAddress = EmailAddress::of(" ANNIE@EMAIL.COM"); $emailAddress === $sameEmailAddress; // true