Где и как делаем валидацию уникальности User::$username?
1. В конструкторе сущности User? Но тогда надо инжектить сервис типа UsernameAlreadyRegisteredChecker, имеющий доступ к репозиторию пользователей (или сразу репозиторий можно передавать, не важно). Может какой-нибудь UserFactory?
2. А может в отдельном сервисе валидацию делать? Но тогда у нас нет уверенности, что клиент не забудет вызвать валидацию. Фактически, мы больше не можем полагаться на аксиому о консистентности модели (invariants).
3. Есть еще вариант типа хранить в памяти "каталог", который сделать корнем агрегата. По-моему, это вообще бред, по крайней мере для php-кода, отрабатывающего по схеме "
4. ...
...
N. Уникальность юзернэйма - не бизнес-требование, не надо валидировать вовсе. Полагаемся на эксепшн со стороны хранилища. ТС - мудак, ниче не понимает в DDD, Я СКОЗАЛ!!1
Кто как делает?
PS. Валидацию на клиентской стороне (в браузере и т.п.), валидацию DTO в слое presentation/application не рассматриваем, считается, что они и так реализованы. Речь идет о валидации модели в доменном слое.
_____________
Профессиональная разработка на заказ
Я на GitHub | второй профиль