yuko/ddd-helper

common classes and interfaces to architect ddd

dev-master 2021-11-17 14:12 UTC

This package is auto-updated.

Last update: 2025-06-17 22:02:48 UTC


README

Общие классы и интерфейсы для использования при проектировании ДДД сущностей

Почему в папке инфраструктуры - для использования в контекстах, чтобы каждый контекст мог их использовать без постоянного копипаста

  1. Model\AggregateRoot.php

Интерфейс, который должны имплементировать сущности-агрегаты. Только агрегаты должны иметь возможность релизить и записывать доменные ивенты, поэтому данный интерфейс имеет функцию releaseEvents, которую должны имплементировать сущности-агрегаты.

  1. Model\EventTrait.php

Trait с реализацией методов recordEvent и releaseEvents, подключается в сущности агрегаты, recordEvent вызываются по необходимости записи ивентов после изменения состояния сущности, releaseEvents вызывается после сохранения изменений состояния агрегата в базу

  1. Model\EntityNotFoundException.php

Доменный exception используется как доменное сообщение в бизнес-логике, NotFound очень важно, но могут быть и другие типы, например EntityAlreadyExists и.т.д

  1. Model\Flusher.php

Интерфейс варианта сохранения изменений сущности в базу на основе Unit of Work (например как у доктрины)

  1. Model\DomainEventDispatcher

Интерфейс реализации запуска ивентов после сохранения сущности агрегата в базу