reformo / backendbase-specification
Basic classes for Specification pattern with Notification pattern in PHP.
1.0
2024-07-25 12:22 UTC
Requires
- php: ^8.3
- malukenho/mcbumpface: ^1.2.0
Requires (Dev)
- doctrine/coding-standard: ^12.0.0
- phpstan/phpstan: ^1.11
- phpunit/phpunit: ^11.2.8
This package is auto-updated.
Last update: 2024-11-25 19:36:38 UTC
README
Basic classes for Specification pattern in PHP. On top of the typical set of and
, or
and not
specificaitons, anyOf
, oneOf
, noneOf
specifications are proposed.
This package is based on the implementation in carlosbuenosvinos/ddd.
Installation
$ composer require reformo/backendbase-specification
Usage example
<?php use Backendbase\Specification\Specification; use Backendbase\Specification\OneOfSpecification; class Order { public function isPaid() { return true; } public function isShipped() { return false; } public function isCancelled() { return false; } } class UnshippedOrderSpecification extends Specification { public function isSatisfiedBy($order): bool { return !$order->isShipped(); } } class PaidOrderSpecification extends Specification { public function isSatisfiedBy($order): bool { return $order->isPaid(); } } class CancelledOrderSpecification extends Specification { public function isSatisfiedBy($order): bool { return $order->isCancelled(); } } $paid = new PaidOrderSpecification; $unshipped = new UnshippedOrderSpecification; $cancelled = new CancelledOrderSpecification; $paid->and($unshipped)->isSatisfiedBy(new Order); // => true (new OneOfSpecification($paid, $unshipped, $cancelled))->isSatisfiedBy(new Order); // => true