Классная мысль. Спасибо )
DDD конечно не противоречит строгой типизации или другой типизации. Можно что угодно использовать.
Но Алан Кей, Дэвид Уэст, ребята из айспринг и я лично пришли к выодам что динамическая типизация в этой теме круче. Но это мелочи. Гораздо важнее домены, события и границы доменов. Это целое искусство.
Про чистый код не готов комментировать. Для меня это что то далёкое от реальности. Я понимаю лишь читаемый код и не читаемый. Прочитав десятки стилей кода. От джуниоров до сеньоров. Сотни проектов и репозиториев на гитхаб. Я понимаю что есть код который легко понимаю, а есть такой код который мне понять тяжело. И это субъективно. Но я пишу код и получаю сообщения от людей из РФ и других стран где люди говорят что мой код легко читать и просто модифицировать. Смею надеяться что понимаю как писать код. Однако это также зависит от того кто читает и владеет архитектурой кода.
События действительно сложнее в чтении и отладке чем тот же MVC. Типа простой Симфони или ларавел. Если мы говорим о простом микросервисе. Берём идеи которые отражены в симфони демо и спокойно работаем. Все просто и всем понятно.
Однако этот подход начинает дико ломаться и создавать проблемы когда мы делаем что то более сложеное. Когда мы работаем с большой системой, где есть более 2х команд, и в каждой команде более 5-10 программистов. Там начинаются сайд эффекты и проблемы. Команды начинают конфликтовать или делать двойную работу. Вот там то и нужно делать DDD & EDA, которые с одной стороны чуть чуть усложняют код, с другой стороны решают проблему переиспользования кода и взаимодействие команд. Эта штука может масштаьироваться до 100 и более команд без лишних рисков. Но работает это всё только там где в командах существует культура такой разработки.
Иначе создаётся ситуация когда культура хавает стратегию на завтрак. Вся эта штука не работает если команда не привыкла к DDD & EDA. Или понимает это плохо.
DDD как раз был придуман для того, чтобы писать более понятный код, убирая сложность внутрь абстракций, отражающих реально существующие бизнес-объекты и процессы. Владея базовой терминологией я быстро понимаю, какой сервис для чего служит, где какие данные лежат и как их достать и агрегировать, и что, собственно, мне нужно дописать, чтобы выполнить поставленную бизнесом задачу.
Также мой к счастью короткий опыт разработки под WordPress говорит мне, что вот уж его точно не надо приводить в пример ни как понятного кода, ни как среды, где возможна конкурентная командная разработка, ни как проекта, где хорошо выстроены границы предметных областей.