apie/common-value-objects

Composer package of the apie library: common value objects

dev-main 2022-09-07 14:01 UTC

This package is auto-updated.

Last update: 2024-10-29 05:48:12 UTC


README

common-value-objects

Latest Stable Version Total Downloads Latest Unstable Version License PHP Version Require Code coverage

PHP Composer

This package is part of the Apie library. The code is maintained in a monorepo, so PR's need to be sent to the monorepo

Documentation

A set of common value object classes that can be used right away or can be used as examples how to make common value objects.

Enums

enums are just PHP 8.1 enums with common values. They are fully supported by Apie.

Identifiers

Identifiers are used by Apie entities to tell the id of an entity. To use these as identifiers for your entity, you need to extend one of these and implement the IdentifierInterface. Otherwise you can also use them as property fields on an entity or a composite value object.

Example:

<?php
use Apie\Core\Identifiers\UuidV4;
use Apie\Core\Identifiers\IdentifierInterface;

class UserIdentifier extends UuidV4 implements IdentifierInterface
{
    public static function getReferenceFor(): ReflectionClass
    {
        return new ReflectionClass(User::class);
    }
}
<?php
use Apie\Core\Entities\EntityInterface;

class User implements EntityInterface
{
    private UserIdentifier $id;

    public function __construct()
    {
        $this->id = UserIdentifier::createRandom();
    }

    public function getIdentifier(): UserIdentifier
    {
        return $this->id;
    }
}

Name value objects

Contains value objects related to names. They are very tolerant what is written in them and support unicode characters to avoid wrong assumptions about what is a valid first and last name.

Range value objects

Ranges often have a restriction related that for example the start should always be lower than the end. They are often a composite of 2 values.

Text value objects

At first these value objects seem redundant as you wonder why you should not just use string, but the problem with using string is that it has no restriction on the length of a text. The value object will also mean you can tell an application it requires a non-empty text for example.