Entity User состоит из Value Objects и имеет поведение, в результате которого изменяются его данные и генерируются события, либо выбрасываются исключения.
User создается из репозитория, например, UserRedisRepository, реализующего интерфейс UserRepositoryInterface, туда же и сохраняется после изменений данных.
События распространяются по шине EventBus и могут быть обработаны заинтересованными слушателями.
User имеет права (enum Action), определяемые битовой маской Access.
Работа "тонких" контроллеров заключается в:
- поднятии сущности из репозитория (
$repo->findById(int $userId)
), - проверке прав на текущее действие (
$user->assertCan(Action $a)
), - вызове соответствующего поведения (
$user->doAction()
), - сохранении сущности (
$repo->persist(User $user)
), - отправке созданных событий в шину (
$bus->publish($user->pullEvents())
), - возврате "success" или "failure".