Кризис DDD сообщества

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Год назад Максим Аршинов (marshinov) выступил с докладом "Быстрорастворимое проектирование". Отличный доклад, харизматичный спикер, полезные материалы в конце. Этот доклад изменил моё понимание того что я делал — кто из нас не пытался интуитивно применить pipeline-архитектуру? А тут ещё элегантные решения помноженные на DDD! С этого начался мой путь евангелиста предметно-ориентированного проектирования.


Скоро DotNext 2019 Moscow. Как всегда, ждём обзора новых фичей, обмена опытом, best practies, архитектурных решений — за это мы все и любим конференции. В списке докладов вокшоп "Блеск и нищета предметной модели", который обратил моё внимание. Цитата со страницы:


Фаулер и Эванс считают анемичную модель антипаттерном. Однако многие кодовые базы, с которыми доводилось работать спикеру, реализованы в стиле «анемичной» модели. Доклад посвящен сравнению сильных и слабых сторон обоих подходов и не очевидным деталям реализации модели предметной области в парадигме ООП и в функциональном стиле.

Сама постановка заставляет задуматься о том, что в развитии DDD движения наметился кризис. Небольшой разбор дисфункций использования и причинах подобных перекосов под катом.


Дисфункции использования предметно-ориентированного проектирования


У настоящей ситуации есть некоторое историческое развитие. Рассмотрим поэтапно как развивалась ситуация.


Продвижение


Максим, на мой взгляд — самый известный разработчик, состоящий в комьюнити, который много лет грамотно продвигал DDD, рассказывая о самом понятии, использовании. Честь ему за это и хвала! И я привожу в пример Аршинова, только потому, что считаю его лучшим на данный момент спикером дотнекста.


Дисфункция #1: Рентабельность


marshinov написал несколько статей на предмет стоимости внедрения практик DDD. Вывод простой — предметно-ориентированное проектирование стоит дорого. И суждения справедливы — сам Эванс в своей книге отмечает, что команда должны быть очень квалифицированной, а значит дорогой. Кроме того, это постоянные улучшения, что для бизнеса дорого. Хорошо раскрывает эту тему статья Мартина Фаулера о расходах на архитектуру. Смею предположить, что вопрос того сколько бизнес хочет потратить ресурсов решение своих проблем в первую очередь он сам. И заказчик при этом не решает сколь-нибудь крупных своих проблем, то продать ему даже SOLID не выйдет.


Очень важно понимать антагонизм бизнес-требований и архитектурных решений. Бизнесу необходимо наиболее дешёвое решение, которое закроет имеющиеся потребности (и лучше с первого раза и навсегда). Команды хотят делать инструменты и решения, которые наиболее правильно, быстро и красиво решают бизнес-задачи, но особенно задачу адаптивности к изменениям. Природа этих потребностей (по сути полярных противоречий) весьма диалектична, что в свою очередь означает, что нельзя получить реализацию сложных требований без проработки архитектуры, и нельзя стоить кондоминиумы вместо собачей конуры. Нет, конечно всё можно. Но факт в том, что высокие требования с одной стороны порождают соответствующие с другой. Как и поталогическая слабость одной стороны ограничивает другою.
И вот, в попытке соответствовать бизнесу, образовалось вторая беда...


Дисфункция #2: Быстрорастворимое проектирование aka Анемичная модель aka соглашательство


Очевидно, что некоторое сообщество программистов пытается нести в массы практики удешевляющие предметно-ориентированное проектирование, снижая затраты и применяя новые методики: RailwayProgramming, Pipelines, Анемичная модель. Классный подход, многие советуют, этому можно научить любого программиста: "вот тебе SeedWorks с интерфейсами, реализуй их и всем будет". И это работает! но это не DDD.


Вы не вполне поняли Эванса.


  • Кто не хвалит Клопштока? Но станет ли его каждый читать? Нет. Мы хотим, чтобы нас меньше почитали, но зато прилежнее читали! (Лессинг).

Сейчас объясню.


Анемичная модель — это антипаттерн


Дело в том что в науке существует два метода исследования — описательный и аналитический (привет Адам Смит). Когда мы делаем Анемичную модель, мы просто описываем что видим, и живём с этим как есть. Это отражает бизнес и достаточно для реализации бизнес-возможности. Важный принцип описанный Эвансом — не тратить ресурсы на идеальную систему, а смоделировать процесс так как он есть, а уже потом начинать глубокий рефакторинг. И в какой момент с Анемичной Моделью мы сможем перейти к глубокому рефакторингу? Предполагается ли вообще к нему приступить? Мне кажется что ответ будет отрицательным, а модель тут осталась как атавизм.


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



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


Но всё не могло закончиться бесславным концом DDD идеи.


Дисфункция No3 Жизнь после бизнес-объектов aka усложение инструментария.


Максим и Вагиб весной 2019 рассказывали нам о том как не приехали фичи F# в C#, О том что сделать правильно в F# модель проще, о том как в функциональщине не нарушить ООП. Теперь массы могли считать, что DDD не только не по карману заказывающим музыку, но и не для всех смертных, а только знающих функциональное программирование.


Послушайте куда они все клонят — теперь предметно-ориентированное проектирование дорого, эффективно можно писать только на F#, и вообще работает иногда-иногда. Есть не слабое впечатление, что тем самым авторы книг и статей отвлекают нас от самого важного в DDD, завлекая игрой в идеальные тактические паттерны. И они обязательно должны быть красивыми и вылизанными, а иначе...


Конечно, нет никакого иначе. Все эти абстракции важны в переговорке на BrainSrorm'е, когда все должны понять всё предельно чётко. Или если вы найдёте менеджеров и аналитиков которые станут смотреть ваш код — единый язык (если код UL).


Однако, как и говорилось выше, противоположность будет искать себе дорогу. Подход прижился там, где бизнес готов заплатить за разработку неочевидного функционально кода — это всего лишь рыночная ниша, а не правило.


Что здесь совершенно отвратительно, так это простая человеческая природа отношения к достижениям — люди ценят такие достижения в себе, не придавая им формы и прикладного применения. И тут список может быть длинный. Эйнштейн дал нам СТО, ОТО, ФЭ, он отличный учёный, но спросите среднего человека о релятивисском движении, времени — не нужен ему Энштейн, но в "умном" разговоре можно было бы упоминуть, что всё относительно. Спросите человека о Фрейде, великолепном психологе, давшем серьёзное движение науке, использует ли этот человек психологию например для толкования вчерашнего кошмара — не будет, но упомянет когда-нибудь сексуальность и психологию масс. Маркс — тот кто сделал из социологии и истории науку, но ни кому нужен научный социализм, а вот про прогрессивный налог, честную демократию говорить могут все. Нет формы и у проблемно-ориентированного проектирования — Эрик Эванс открыл нам новые высоты, дав великолепное средство снижение сложности программного обеспечения, но якобы как применять DDD и что делать — не понятно, и вообще не совсем это подходит.


Не знаю как про остальное, но вот с предметно-ориентированным проектированием причины недопониманий понять можно.


Причины кризиса использования


Принципы предметно-ориентированного проектирования очень заманчивы, логичны и холистичны. Тут всё рядом — Agile, CI, SOLID, GRASP — всё лучшее что придумали разработчики. Однако, мало верить в DDD, или бизнес, или опыт. Многие люди из community, просто разработчики из интеграторов и аутсорсинг контор имеют отпечаток бизнес-ценностей в своей деятельности, и при всём желании не могут попробовать ведущие методики и практики, потому что цена этих проб и ошибок не входит в прайс — вполне материалистический финал.


Подобным командам совершенно ничего не остаётся кроме как делать программирование выгодным, применяя подходы попроще, нанимая разработчиков подешевле, зато "на полшишечки" можно зацепить анемичную модель. И если вы разработчик одной из приходящих на час разработчиков — нет у вас значительных перспектив — вы должны выполнить заказ, а творчество поощряется только на гитхабе в домашнем проекте. DDD — это не роскошь для архитектора, не понты заказчика — уровень команды в отдельном Enteprise. Осознать нужно следующее — пока вы состоите в производственных отношениях с теми, кто продаёт вашу квалифицированную работу тем, кто лучше заплатит, вы будите делать только то, за что заплатил заказчик — реализацию бизнес-задач. К сожалению, опробование передовых практик не всегда лежит в плоскости этих задач.


Итог


DDD можно пробовать всегда, если вы описываете предметы реального мира. Этот подход можно применять и в PHP, и в VBA, и 1C (и разработчики применяют). Проблема применения подхода скорее в плоскости общения людей, а технологии скорее в помощь. Общайтесь, пробуйте, учите других! Прокачивайте Softskills, солидарность, единство целей. DDD — это всего лишь методика работы сплочённого коллектива.


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


Как бы там ни было, остаётся надеяться, что в попытках прикоснуться к ведущим практикам, DDD не трансформируют ещё в какую-то сторону в угоду удобности заказчикам и командам. Жду предстоящего доклада.


P.S. Целью топика является приглашение к дискуссии. Нет никакой цели принизить заслуги любых членов DDD Community. С уважением отношусь ко всем представителям, что не снимает проблем развития.

Источник: https://habr.com/ru/post/474320/


Интересные статьи

Интересные статьи

Среди советов по улучшению юзабилити интернет-магазина, которые можно встретить в инете, один из явных лидеров — совет «сообщайте посетителю стоимость доставки как можно раньше».
Если честно, к Д7 у меня несколько неоднозначное отношение. В некоторых местах я попискиваю от восторга, а в некоторых хочется топать ногами и ругаться неприличными словами.
Каждый лишний элемент на сайте — это кнопка «Не купить», каждая непонятность или трудность, с которой сталкивается клиент — это крестик, закрывающий в браузере вкладку с вашим интернет-магазином.
Хотите повстречаться с Джоном Гэллоуэем (исполнительным директором .NET Foundation), Павлом Йосифовичем (автором легендарной «Windows Internals» и новых курсов на Pluralsight)? Или может быть, с ...
Один из самых острых вопросов при разработке на Битрикс - это миграции базы данных. Какие же способы облегчить эту задачу есть на данный момент?