Здравствуйте, gandjustas, Вы писали:
S>>Чем DDD хуже истоков agile и термина рефакторинг?
G>Тем что рефакторинг и agile имеет доказанную пользу, а DDD — нет.
Для разработчика из видео выше это будет не так -- у него ДДД имеет доказанную пользу. Короче, это субъективщина.
S>>>>Я работал в компании, которая распиливала монолит на микросервисы по ДДД. Использовали стратегические паттерны.
G>>>Какие паттерны?
S>>https://habr.com/ru/articles/787460/
G>Это не про код, а про какую-то философию, тут вообще сложно что-либо оценивать. Меня именно код интересует.
G>Ну вот мы сделали два разных класса Employee. У меня сразу вопрос: это одна таблица в системе или нет? Если
Это можно решить в самый последний момент, согласно ДДД. Это детали.
G>Как быть если ЗА начинает зависеть от skills (они в разных моделях)?
G>И вообще calculateWageWithoutTax в employee выглядит крайне сомнительно, для расчета ЗП и налогов нужно такое количество данных подтянуть из всей системы, из-за которых сама система и делает, что прокинуть это все в один Employee выглядит неразумным.
Значит нужен какой-то другой agg root.
G>DDD это набор паттернов, которые вроде как должны хорошо работать в каких-то сценарияхх, но на проверку они все плохо работают.
G>В любой книге про DDD 80% это паттерны и 20% это какие-то философские вещи.
На мой взгляд, скорее это методология, а не набор готовых рецептов. По-отдельности применять можно, но сложно.
Точнее уже разбили на стратегически и тактические паттерны.
G>Функционал нужен пользователю. Пользователь нажимает кнопки, кнопки вызывают хэндлеры. Вызывать репозиторий из хэндлера? А где тогда DDD?
Значит тут и репозиторий особо не нужен, обычный DAL.
S>>Помилуйте, были Си (процедурный язык), Lisp\Ocaml (фп языки), prolog (лп). Языков тьма. Тот же Erlang был. Но вот почему-то был выбран один из ООП языков. Почему?
G>Потому что в середине двухтысячных были современные языки: C#, Java, Delphi (еще живой был, но только десктоп)), С++ (который был в глубочайшем кризисе)
G>Для веба был еще PHP, но он даже на фоне Delphi выглядел как наколеночная поделка.
G>Так как я знал делфи и хотел развиваться в сторону веба, то выбор был C# или Java — оба ОО-языки.
Но опять же, никаких разумных сравнений произведено не было -- loc, сложность поддержки и т.п. Чисто умозрительные вывод. Вот для кого-то
и ДДД выглядит интересно.
S>>Проверка инварианта делегируются бд, а класс получает результат этой проверки. В бд можно делать еще lock, если что.
G>Покажешь пример кода, как это сделать?
В транзакции что-то посчитать? Закиньте соотв. промт в чатбот.
S>>Ну так переделайте на read-write, а не просто read. И используйте соотв. уровень изоляции, например read commited.
G>На read commited это и происходит.
G>Можно for update локи вешать в начале, если меняется та же запись, но на практике есть остаток на складе и список реезрвов, там уже serializable надо.
G>Но мы уже ушли от работы с объектами в памяти. Что собственно и демонстрирует что в таком режиме самые важные инварианты реализовать нельзя. Надо с базой работать.
А бд не с объектами в памяти работает? Ну если у нас данные лежат в бд, то естественно что их надо забрать оттуда.
S>>Не серьезно -- вы приложили опереточный пример, а в случае DDD речь может идти о 10 или 100 тыс. строк кода минимум.
G>Это опять вера, что на каком-то количестве строк DDD обязательно сработает. Но примеров нет.
G>Почему-то все работающие методики работают даже на очень малых примерах.
Кто-то считает, что 1 млн лок на пхп без ДДД это уже вилка. Ну вот можно от этой цифры отталкиваться. Хотя сколько людей, столько мнений.
S>>Не одно и то же. Одно дело сравнить алгоритм сортировки на Си vs С#, другое дело какое-нибудь годами разрабатываемое десятками людей ПО.
G>Любое ПО декомпозируется на отдельные компоненты, о чем говорят все методики и DDD в том числе. если в рамках одного простого компонента нет преимуществ, то почему кто-то думает, что на большом масштабе преимущества появятся?
https://ru.wikipedia.org/wiki/%D0%AD%D0%BC%D0%B5%D1%80%D0%B4%D0%B6%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D1%81%D1%82%D1%8C
S>>Попросите у чатбота какого-нибудь пример приложения, написанного по DDD.
G>Я спрашивал, все примеры содержат очень сомнительные решения, которые без паттернов DDD были бы проще и надежнее.
Возможно. 101 раз повторю -- это вкусовщина. У разработчика из Я. по ссылке выше на этот счет может быть другое мнение. И это нормально.