TGViewer
Саша Раковский Саша Раковский @rakovskyxp · 833 subscribers
Post #38 949
Про DDD пару слов

Пока небольшой пост по код-ревью перерастает в целую статью на хабр, попытаюсь порадовать технарей вот каким инсайтом. Я его уже касался несколько раз, но знаю, что тема усваивается плохо, поэтому зайду ещё с такой стороны.

Про скелеты

Из раза в раз вижу одно и то же: при разработке новой функциональности разработчики часто стремятся заранее продумать доменную модель в отрыве от её поведения. Почему в отрыве? Потому что поведение еще не написано, а структура уже придумана и отражена в коде. Получается, в каком-то смысле, скелет доменки, на который уже навешивается поведение. В такой парадигме в паре данные-поведение внимание в первую очередь уделяется структуре данных.

Глупо будет утверждать, что такой подход не работает. Но после знакомства с книжкой Фаулера по рефакторингу я стал использовать другой способ проектирования.

Альтернатива

Поигравшись с примером из книжки, с код-смеллами, которые заботливо перечислил в ней мой любимый Кент Бек, я стал воспринимать дизайн совсем иначе. Теперь для меня именно поведение кода стало первичным артефактом, а структура данных отошла на второй план. Я стал считать, что самый важный результат работы разработчика - это не микросервис, не класс, не библиотека, не табличка в базе данных. Самое важное - поведение.

Если приложение не делает то, что от него требуется, то его нельзя релизить. Если оно делает все, что от него требуется, то не очень важно, сколько там табличек, классов и микросервисов. Хотя, конечно, чем меньше, тем лучше.

Нет, я не перестал уделять внимание дизайну и читабельности, но подход к разработке изменился полностью. Теперь в тдд-цикле я сначала пишу код, который реализует поведение, особо не заботясь о дизайне. И только потом, имея тесты, валидирующие поведение, и сам код поведения, я начинаю этот код раскладывать по коробочкам - по доменным классам.

То есть у нас произошла смена метафоры: мы больше не строим скелет, на который потом наращиваем мясо. Теперь мы смотрим на тропки, по которым ходят люди, и мостим их, добавляем ограждения, засеиваем вокруг газон, асфальтируем велосипедные дорожки.

Преимущества

Кто читал в моих статьях про эволюционный дизайн, структурный дизайн, про cohesion и coupling, тот вспомнит, что про что-то похожее я уже писал. В таком подходе структура опирается не на гипотетические спекуляции, а на реально получившиеся связи, необходимые для реализации поведения. Слабосвязанные части идут в разные компоненты. Плотно перевязанные клубки поведения живут рядом в одном компоненте.

Пример

В ДДД-книжке Эванс приводил пример, где маршрут может быть спроектирован либо как последовательность точек, либо как последовательность переходов между ними. Какая реализация лучше? Зависит от поведения, от связей в коде. Именно поэтому решение может быть полезно принимать уже после того, как вы уже посмотрите на поведение, на код и связи в нём.

И именно поэтому половина оригинальной книжки по тдд - это примеры рефакторинга доменных моделей. Никто не ожидает от вас, что вы сразу догадаетесь, какая доменная модель подойдёт вам.
  • 👍 14
  • ❤ 6
  • 🔥 4
More from @rakovskyxp
  1. Oct 16, 2026Очередной топ-3 Последние посты были пустоватыми, жвачка такая, воздух погонять. Люди жалу…
  2. Oct 15, 2026В марте 2025 Дарио сказал, что в течение 12 месяцев 100% кода будут писать нейросети. Коне…
  3. Oct 9, 2026Я полгода держался, но нет. Теперь будут регулярные разборы ахинеи от этого чувака, извини…
  4. Oct 9, 2026Или вот такое ещё. Короче, если подписаны, то фильтруйте все до каждой запятой.
  5. Oct 9, 2026Вот ещё немного ахинеи
  6. Oct 9, 2026Сейчас чем дальше, тем популярнее становится вот этот чувак. Будьте осторожнее, человек не…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →