Юра
Еще метод но так не советуют это сделать их публичными и получать напрямую из фабрики из контейнера
Nikolay
Павел
Kirill
Всем привет! Кто-нибудь использует http код 422 при формировании ответа? Никак не могу уловить, в чем отличие от 400
Kirill
а у меня и там и там 400 сейчас(
Kirill
спасибо
Юра
Юра
Почитай внимательнее
Andrii
Юра
Контент тип ОК, но тело не ок
Юра
Причем видимо тело не ок в смысле не валидность данных, а например битый джсон или хмл неправильно отформатированный
Jonny
https://stackoverflow.com/questions/16133923/400-vs-422-response-to-post-of-data
Вроде норм разжевано
Юра
Если битый джсон то 422
Юра
Эти все коды сами по себе не имеют никакого смысла
Юра
Их нужно рассматривать в контексте клиента который будет это апи использовать
Юра
Если твой клиент не собирается различать битвй джсон или невалидные данные то для него не имеет значения какой там код
Vladimir
когда в имя бота затесался timestamp)
Сергей
Всем привет.
Расскажите про ддд немного? точнее про ограниченные контексты.
Если при изменении внутри агрегата необходимо в рамках одной транзакции изменять другой агрегат - это результат неправильного проектирования?
Пример: Есть агрегат заказа , при смене статуса которого надо пересчитывать рейтинг пользователя. Как тут быть? Пользователь с его рейтингом должен быть внутри агрегата заказа?
или Агрегат с юзером должен реагировать на событие смены статуса заказа? Но для пересчета рейтинга пользователя надо опираться на заказы - т.е. опять таки пользоваться контекстом заказа.
The Ant
Nikolay
The Ant
Всем привет.
Расскажите про ддд немного? точнее про ограниченные контексты.
Если при изменении внутри агрегата необходимо в рамках одной транзакции изменять другой агрегат - это результат неправильного проектирования?
Пример: Есть агрегат заказа , при смене статуса которого надо пересчитывать рейтинг пользователя. Как тут быть? Пользователь с его рейтингом должен быть внутри агрегата заказа?
или Агрегат с юзером должен реагировать на событие смены статуса заказа? Но для пересчета рейтинга пользователя надо опираться на заказы - т.е. опять таки пользоваться контекстом заказа.
Если при изменении внутри агрегата необходимо в рамках одной транзакции изменять другой агрегат - это результат неправильного проектирования?
Да. Но в твоем примере это разные транзакции всё-таки.
Пример: Есть агрегат заказа , при смене статуса которого надо пересчитывать рейтинг пользователя. Как тут быть? Пользователь с его рейтингом должен быть внутри агрегата заказа?
Не должен, они разные же. Да и рейтинг пользователя не должен знать ничего про заказ, как и заказ про рейтинг пользователя(наверное, могут быть нюансы)
Решается ивентами. Тип при смене статуса бросаешь ивент, на который подписан хендлер с пересчетом рейтинга. Через мессаджи какие. Кафка, хуяфка, кролик, шмолик... етц.
или Агрегат с юзером должен реагировать на событие смены статуса заказа? Но для пересчета рейтинга пользователя надо опираться на заказы - т.е. опять таки пользоваться контекстом заказа.
Типо того. Запросишь у сервиса заказов список заказов юзера да пересчитаешь. Через интерфейсы, или через веб интерфейсы, или как там хочешь.
Сергей
Если при изменении внутри агрегата необходимо в рамках одной транзакции изменять другой агрегат - это результат неправильного проектирования?
Да. Но в твоем примере это разные транзакции всё-таки.
Пример: Есть агрегат заказа , при смене статуса которого надо пересчитывать рейтинг пользователя. Как тут быть? Пользователь с его рейтингом должен быть внутри агрегата заказа?
Не должен, они разные же. Да и рейтинг пользователя не должен знать ничего про заказ, как и заказ про рейтинг пользователя(наверное, могут быть нюансы)
Решается ивентами. Тип при смене статуса бросаешь ивент, на который подписан хендлер с пересчетом рейтинга. Через мессаджи какие. Кафка, хуяфка, кролик, шмолик... етц.
или Агрегат с юзером должен реагировать на событие смены статуса заказа? Но для пересчета рейтинга пользователя надо опираться на заказы - т.е. опять таки пользоваться контекстом заказа.
Типо того. Запросишь у сервиса заказов список заказов юзера да пересчитаешь. Через интерфейсы, или через веб интерфейсы, или как там хочешь.
ну примерно так и думал) спасибо
Павел
Юра
Пользователь и заказ это не агрегат
Юра
То тебе ворклоу нужен а не агрегат
Сергей
Юра
Можно вместо воркфлоу попроще, команду взять
Юра
Смена статуса происходит ж не сама по себе. Вот и например есть команда ShipOrderCommand и меняй там себе ордер и юзера
The Ant
Воркфлоу же не про ивенты, а про контроль стейта, чтоб не прыгали через этапы какие-то
Сергей
Можно вместо воркфлоу попроще, команду взять
воркфлоу у меня сейчас используется. Но там логика размазана по событиям получается.
А в ддд прежде всего прельщает что там код строго по ООП пишется и по-другому его в принципе писать сложно.
Юра
Юра
Юра
Должны быть заранее продуманы все возможные бизнес операцти
Юра
Вообще уходить нало от круд модели
Павел
Юра
Ага. Поменяли заказ, статус апдейтнули. Почему? Зачем?
Юра
Да там где нет бизнес процессов там круд ок вообще
Юра
Запихнул данные и ок
Юра
И не важно почему
Юра
Юра
Атомарный юнит изменения состояния системы
Павел
Атомарный юнит изменения состояния системы
Ну вы выше написали:
Вот и например есть команда ShipOrderCommand и меняй там себе ордер и юзера
Так это штуки из разных контекстов, т.е. у вам команда работает с разными контекстами? А каким образом? Тупо дергает все (например репозитории) или ходит по портам, чем являются порты?
Юра
Ходит в репозитории
Юра
Но получается особо больше и не надо никому ходить в репозитории
Юра
Т.е. она может репозитории в себе хранить. Вот тебе и твой контекст сохранен
Юра
Короче это получается не вертикальный слой а горизонтальный
Павел
Павел
Либо команда вне контекста вообще
Юра
Да команда вне контекста
Юра
Как и орм
Юра
Я отталкиваюсь от того как проще понимать потом систему
Юра
Мне кажется проще иметь все команды в одном месте, чем сделать все по фен-шую и потом ломать голову где бизнес логикк зарыта в каких контекстах размазана и т.д.
Павел
Юра
Ну вот ты пришел с этим вопросом сюда почему?
Юра
Потому что что-то тебя не устраивает видимо в такой архитекторе
Юра
Кидай тогда ивенты
Павел
Павел
Меня заинтересовал ваш коммент, что вы как то работаете с агрегатами без комманд
Юра
Я такого не писал )
Юра
Да с командами ты создаёшь луз каплинг, но он сконцентрирован в одном месте
Павел
Я такого не писал )
Ну я видимо так понял :) у вас выходит команды вне конекста, т.е. весь апп сервис снаружи модулей.
Юра
Меня лично такой каплинг устраивает вполне
Павел
Ладно тогда расходимся, спасибо и сорян )
Юра
Мне главное что есть место в котором можно увидеть все бизнес операции
Юра
Если модули независимо должны работать и они больше как плагабл фции да команды не подходят
Павел
Павел
А если надо сделать что-то под одной бизнес операцией последовательной - это уже что-то другое. "Процесс" или еще что-то
Юра
Да часто надо что-то делать из других контектов
Юра
Еще есть арзитектура такая: есть некий процесс с некими точками расширения (хуками), и можно туда внедрятся
Юра
Тогда можно сделать это более модульно
Юра
Так делает вордпрес например