Skip to Content
Domain-Driven Design in PHP
book

Domain-Driven Design in PHP

by Keyvan Akbary, Carlos Buenosvinos, Christian Soronellas
June 2017
Intermediate to advanced
394 pages
8h 52m
English
Packt Publishing
Content preview from Domain-Driven Design in PHP

Forcing Invariants

Factory Methods in the Aggregate Root are also a good place for invariants.

In a Domain Model with Forum and Post Entities, where Post is an aggregated part of the Aggregate Root Forum, publishing a Post could look something like this:

class Forum{    // ...    public function publishPost(PostId $postId, $content)    {        $post = new Post($this->id, $postId, $content);        DomainEventPublisher::instance()->publish(            new PostPublished($postId)        );        return $post;    } }

After talking with a Domain Expert, we came to the conclusion that a Post shouldn't be published when the Forum is closed. This is an invariant, and we could force it directly on Post creation, thereby preventing an inconsistent Domain state:

class Forum{     // ... public function ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

PHP Web Services

PHP Web Services

Lorna Jane Mitchell
PHP Microservices

PHP Microservices

Pablo Solar Vilariño, Carlos Pérez Sánchez

Publisher Resources

ISBN: 9781787284944