Как их организуете (их тогда будут сотни)?
Раскидываю по неймспейсам. Скажем все действия относящиеся к юзерам находятся в папке Users.
Только вы учитывайте что CQRS это прикольно но особо не нужно. К примеру это сразу подразумевает что вы используете UUID вместо автоинкрементов и прочей чуши. Можете сделать хотя бы как Дядя Боб предлагает в своей Clean Architecture. Просто сервис на каждое действие.
Есть ли смысл выносить каждую доменную модель в модуль/микросервис
Если вы не умеете писать монолиты так что бы потом все было относительно нормально, думать о микросервисах не стоит. Так же как делить проект на модули когда вы еще слабо представляете как прописывать границы этих модулей.
Раньше для дополнительных действий мне достаточно было использовать что-то вроде beforeUpdate/afterCreate модели.
ну а сейчас вы будете эти вещи в сервисы пихать. Причем возможно не в один сервис. Вообще старайтесь не делать "хуков" и не будет с ними проблем. Есть к примеру DomainEvents такая штука, ну и можно все эти "дополнительные действия" в хэндлерах команд делать.
Как не превратить кидание/получение событий типа PostBeforeEdit/PostBeforeEditHandler в "callback hell"?
Просто забудьте об этих ивентах.
ACL. Где храните указанную логику?
Есть в симфони security vouters, а дальше все зависит от того что вы делаете.
Как вы версионируете подобные проекты? А если нужна "N-1" рабочая версия на продакшене?
git + docker теги в мастере. Ветки нужно плодить только тогда, когда у вас система деплоится кастомерам и нужно поддерживать сразу кучу версий. Называется это gitflow.
На какие проекты (точнее, на код) можете посоветовать посмотреть для лучшего понимания? Ссылки на репозитории?
На гитхабе катострофически мало примеров хороших приложений на симфони. Да и не только на симфони - в принципе найти в открытом доступе сложный проект - это нереально. NDA и все такое. Такие системы обычно очень дорогие и закрытые со всех сторон.
p.s. почитайте книжки:
- Эрик Эванс - Предметно ориентированное проектирование
- Крэйг Ларман - Применение UML 2.0
p.p.s. Все ваши загоны не имеют никакого смысла если вы не будете пользоваться практиками вроде Test-Driven-Development, ну или хотя бы покрывать систему интеграционными тестами. Без этого вы не сможете делать частный мелкий рефакторинг, а без этого ваша система быстро превратится в легаси.