fleshgrinder / value-object
Abstract value object implementation as basis for custom domain value objects.
Requires
- php: >=5.4.0
- fleshgrinder/equalable: ~0.0
- fleshgrinder/stringable: ~0.0
Requires (Dev)
- phpunit/phpunit: ~4.0
This package is not auto-updated.
Last update: 2020-01-24 16:00:30 UTC
README
Value Object
Abstract value object package that contains the building blocks to create custom domain value objects.
Install
Open a terminal, enter your project directory and execute the following command to add this package to your dependencies:
$ composer require fleshgrinder/value-object
This command requires you to have Composer installed globally, as explained in the installation chapter of the Composer documentation.
Usage
There are two abstract classes and one interface in the source directory that can be used to build custom domain value
objects tailored to the needs of a project. The provided ValueObject
interface is a head interface that combines some
interfaces to adhere to a contract of common methods that every value object should provide. Implementation of this
interface is recommended for totally custom behavior.
The SingleValueObject
is the perfect base for building value objects that are representable by a single value. Simply
extend the abstract class and implement the necessary abstract methods and it should work out of the box. You may also
extend the SingleValueObjectTest
and override the getInstance
, getDefaultValue
, and getDefaultUnequalValue
methods for a thorough test of your custom single valued value object.
The MultiValueObject
is the perfect base for building value objects that represent multiple values. However, it only
implements the equals
method that ensures that the given value is of the same instance and delegates further checks
to the extending child class. Multi valued value objects are complex and it is not possible to implement an abstraction
that fits all requirements. You may also simply implement the interface and implement the instance of check yourself if
you want.
Weblinks
- Wikipedia: Value Object
- Mathias Verraes: Casting Value Objects
- Eric Evans (2003): Domain-Driven Design: Tackling Complexity in the Heart of Software
- Wikipedia: Domain-Driven Design
- Carlos Buenosvinos, Christian Soronellas and Keyvan Akbary: Domain-Driven Design in PHP