Mikhαil
Danil
Ayrat
@Liminiens тебе похуй какой таг будет у твоего докер имаджа?
Vladislav
Mikhαil
Vladislav
Anatoly
Anatoly
Ayrat
Ayrat
эх
Anatoly
Roman
Vasily
А из еф выпилили ,шоле, возможность плейн sql исполнять?
Ayrat
Mikhαil
а как орм связан с ддд?
Удобство имплементации - в еф ты просто строишь агрегат на основе его энтити и используешь
А за дал слой отвечает сам еф
То есть ты в командах выполняешь действия на агрегате, а за мапинг на бд отвечает сам еф
Короче глянь пример в книге мс про контейнерные приложения - у них там есть пример того о чем я говорю
Ayrat
ну типа нагородим абстракций чтобы потом вызывать над ними голый сиквель
Vasily
Я с еф работал плотно лет 10 назад, у нас все было хранимками обмазано
Vasily
Иначе там ад был
Mikhαil
Vasily
По перформансу
Vasily
Roman
Roman
и тут как бэ похеру, чем ты достаешь данные из базы, не?
Mikhαil
Mikhαil
Ну то есть разверни мысль немного плз
Roman
проблема в том, что модель хранения и доменная модель — это независимые вещи, и изменения в одной из них не должны вынуждать изменения в другой
Roman
Оригинальная бизнес-задача, которую вы собираетесь решить с помощью разработки, никакого отношения не имеет к тому, будете ли вы хранить данные в постгре, монге или кассандре, и уж тем более, как вы их оттуда будете доставать.
А вот к тому, как выглядят ваши доменные типы, эта задача имеет самое прямое отношение
Mikhαil
Оригинальная бизнес-задача, которую вы собираетесь решить с помощью разработки, никакого отношения не имеет к тому, будете ли вы хранить данные в постгре, монге или кассандре, и уж тем более, как вы их оттуда будете доставать.
А вот к тому, как выглядят ваши доменные типы, эта задача имеет самое прямое отношение
смотри, тогда у меня вопрос
есть агрегат User например. у него есть какой-то набор энтити и вэлью обжектов
есть команда в который вызывается ряд методов агрегате (setProfileData, setRegistrationAddress, calculateЧтотоТам)
данные методы изменяют объект агрегата в памяти (тк слой бд отделен)
вот есть команда которая вызывает Н разных метолов агрегата
а после этого нужно сохранить все эти изменения в бд
как это будет выглядеть на скл? как понять какие поля были выставлены итд
Mikhαil
при этом мы говорим что изменения сущности идут сугубо через корень (класс User), зависимые энтити и вэлью обжекты создаются добавляются удаляются и обновяются только через него
в итоге у тебя есть в доменном слое сложная иерархическая структура классов которая изменилась
а в дал слой как это намаппить корректно?
Roman
Mikhαil
Roman
что такое rich модель?
Roman
ок, допустим, речь про автомобиль. У тебя правило: когда скорость поднимается выше 20 кмч, вдобавок ко всему надо залочить двери. Помимо этого, разумеется, тебе нужно мутировать состояние твоего автомобиля: собсно, увеличить скорость.
Вот твой метод, отвечающий за акселерацию, внутри себя имеет все необходимые проверки, и генерирует список событий, которые получились в результате выполнения команды на увеличение скорости.
В данном случае генерируешь события "Скорость изменилась: новая скорость 25кмч", "Двери заблокированы", "Алерт на непристегнутого пассажира на переднем сиденье"
habib
habib
поэтому нет, и не будет
Roman
что делать с этими событиями и как их сохранять ты уже волен решать сам.
Mikhαil
пример тут
Mikhαil
эт когда логика работы агрегата живет в самом агрегате а не снаружи
Mikhαil
мутировать агрегат в памяти
Roman
как вариант ага
Roman
можно сохранять не события, а новое состояние
Roman
тут как бы зависит от ваших нужд
Mikhαil
как вариант ага
ну а я предлагаю как вариант использовать еф))
вполне жизнеспособный вариант которым многие пользуются
хотя вариант с событиясм вполне ок - если начну использовать роу скл то реально о нем подумаю
Mikhαil
хотя я согласен что есть минус в связывании доменного слоя и дал
Mikhαil
но развязать его не будет сложностей при потребности
Mikhαil
по факту агрегат со свей своей логикой у нас уже описан и если придется отказаться от еф - надо будет лишь заменить слой дал
Mikhαil
агрегат никуда не денется
Mikhαil
ну мы отделяем детали бд от агрегата очень строго
Roman
Mikhαil
Mikhαil
я описал преимущества из-за которых мы его выбрали в контексте ддд
Vasily
Чет звучит как херня
Hog
Я попробовал ефкор для простого проекта, но только из-за того, что в некоторых вакансиях оно встречается.
Hog
Не могу ничего сказать за и против. Простые вещи вроде просто делаются. Но я был когда-то на проекте, где еф затащили изначально и там были огромные проблемы с перформансом. Еф выпилили почти отовсюду, оставили (кажется) только самые простые кейсы и то только потому, что рук не хватало всё переписывать.
Vladislav
У меня в памяти до сих пор лежит ебанина на квери синтаксисе которую я когда-то написал будучи джуном
Vladislav
Наверно худший код в моей жизни
Roman
https://thedomaindrivendesign.io/anemic-model-x-rich-model/
рич модель не понравилась тем, что ИО гвоздями прибито к логике. И логика и ио — источники проблем и непоняток. Когда ты их так жестко смешиваешь вместе, разбираться с любой ошибкой становится экспоненциально сложнее.
Это, впрочем, не значит, что рич модель нельзя организовать по-человечески, без энтитей и эпоксидки
Mikhαil
Mikhαil
Будет немного аутично но в целом терпимо
Roman
почему аутично?)
Mikhαil
Roman
ну оно непривычно для мира сишарпа, но практические бонусы очевидны. И тестировать проще (не надо ласкать моки перед каждым тесткейсом), и в случае ошибок логи читать проще и дебажить легче
Mikhαil
Mikhαil
Вообще с плюсами согласен
Roman
ну ты можешь выкидывать наружу и новое состояние — все зависит от того, что ты дальше хочешь делать
Ayrat
@Liminiens для бота надо выставить privacy disabled чтобы он все сообщения в группе мог читать, да?
Ayrat
у меня без этой настройки он не получает onUpdate
Ayrat
даже с явным меншном
Vladislav
Ayrat
странно
Vladislav
Вроде так всегда было