From 26872d7af27c67409dfe1187cbbb9b02de7015df Mon Sep 17 00:00:00 2001 From: Julien Mercier-Rojas Date: Mon, 20 Dec 2021 07:39:44 +0100 Subject: [PATCH] Simplify ValueObject Interface --- README.md | 9 +++++++-- src/Domain/ValueObject/ValueObject.php | 13 +------------ src/Domain/ValueObject/ValueObjectFactory.php | 18 ++++++++++++++++++ 3 files changed, 26 insertions(+), 14 deletions(-) create mode 100644 src/Domain/ValueObject/ValueObjectFactory.php diff --git a/README.md b/README.md index 621b3d5..56ce2c5 100644 --- a/README.md +++ b/README.md @@ -143,7 +143,7 @@ Value object must be defined as: Think about implementing it like this: ```Php -final class Speed implements ValueObject +final class Speed implements ValueObject, ValueObjectFactory { private static $instances = []; @@ -151,7 +151,12 @@ final class Speed implements ValueObject { } - public function from(mixed $speedValue): static + /** + * @param mixed $value + * @return static + * @throws InvalidArgumentException + */ + public static function from(mixed $speedValue): static { if (! self::$instances[$speedValue]) { if ($speedValue < 0) { diff --git a/src/Domain/ValueObject/ValueObject.php b/src/Domain/ValueObject/ValueObject.php index a0bdb25..f5fb3e9 100644 --- a/src/Domain/ValueObject/ValueObject.php +++ b/src/Domain/ValueObject/ValueObject.php @@ -7,21 +7,10 @@ namespace JeckelLab\Contract\Domain\ValueObject; -use JeckelLab\Contract\Domain\Equality; -use JeckelLab\Contract\Domain\ValueObject\Exception\InvalidArgumentException; -use JsonSerializable; -use Stringable; - /** * Interface ValueObject * @psalm-immutable */ -interface ValueObject extends Stringable, Equality, JsonSerializable +interface ValueObject { - /** - * @param mixed $value - * @return static - * @throws InvalidArgumentException - */ - public static function from(mixed $value): static; } diff --git a/src/Domain/ValueObject/ValueObjectFactory.php b/src/Domain/ValueObject/ValueObjectFactory.php new file mode 100644 index 0000000..e47bc20 --- /dev/null +++ b/src/Domain/ValueObject/ValueObjectFactory.php @@ -0,0 +1,18 @@ +