Satisfaction
Satisfaction is a PHP implementation of the Specification pattern for DDD., (*1)
, (*2)
Purpose
The aim of the specification pattern is to write domain specifications in reusable classes instead of dispatching domain rules conditons in all your project., (*3)
Installation
composer require maximecolin/satisfaction
Usage
Simple example
My model :, (*4)
class Article
{
public $published = false;
public $publishedAt;
}
My specification :, (*5)
use Satisfaction\CompositeSpecification;
class PublishedArticle extends CompositeSpecification
{
public function isSatisfiedBy($article)
{
return $article->published === true && $article->publishedAt <= new \DateTime();
}
}
I want to know if an article is published :, (*6)
$specicification = new PublishedArticle();
if ($specification->isSatisfiedBy($article)) {
// Do something
}
Or, And, Not
You can chain specifications with "or", "and" or "not" condition., (*7)
// If both foo and bar are satified
if ((new FooSpecification())->andX(new BarSpecification())->isSatifiedBy($object)) {
// Do something
}
// If foo is satisfied or bar is not
if ((new FooSpecification())->orX((new BarSpecification())->not())->isSatifiedBy($object)) {
// Do something
}
Author
Maxime Colin www.maximecolin.fr, (*8)
Licence
See the LICENCE file., (*9)
Acknowledgements
Thanks to Jean-François Lépine for his talk about DDD., (*10)