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 @@ +