170 похожих чатов

Всем привет! Пишу сейчас приложение аля учета финансов и возникли вопросы.

Просто не знаю как лучше сделать

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

Так вот возникают вопросы. Нормально ли делать такое в модели, или все же это ответственность сервиса? Нормально ли что модель транзакции будет вызывать модель аккаунта? Из модели транзакции мне напрямую вызывать модель аккаунта, или все же дергать сервис аккаунта?

10 ответов

23 просмотра

Например, есть у тебя коллекция todo. И есть бизнес правило, не больше 10 в коллекции. Есть юзкейс на добавление новой записи в коллекцию. Чтобы соблюсти бизнес правило “не больше 10 на коллекцию” тебе надо, чтобы в момент выполнения юзкейса, количество тудушек не менялось пока ты не завершишь свой юзкейс (свою бизнес транзакцию). Это и есть транзакционная консистентность бизнес правил. Теперь пример с событийной консистентностью. Условия те же самые, есть коллекция todo и правило не больше 10. Ты дёргаешь юзкейс на добавление новой записи в коллекцию, но уже не гарантируешь того, что в момент создания записи будет соблюдено правило 10-ти. После создания записи - создаётся ивент, который уже и повлечет за собой проверку на правило 10 (сага), и если это правило будет нарушено, то будут произведены компенсирующие действия. По аналогии с агрегатами из стратегического DDD, я бы внутри сервиса (агрегата) обеспечивал транзакционную консистентность бизнес правил, а между сервисами – событийную. *один нюанс. Бизнес транзакция понятие шире, чем транзакция в бд. Бизнес транзакция подразумевает еще и лок

Dmytro-Svyrydenko Автор вопроса
Dmitry Croft
Например, есть у тебя коллекция todo. И есть бизне...

Честно, как фронтендер, я вроде все понял, но не уверен. Т.е. я понимаю надобность это делать, но не понимаю каким образом мне это делать и как проверить не сделано ли это уже в моей системе Я так понимаю что чтоб понять как это обеспечивать, мне придется изрядно погуглить?

Dmytro-Svyrydenko Автор вопроса
Dmytro Svyrydenko
Честно, как фронтендер, я вроде все понял, но не у...

Если что, систему пишу я сам и это пет проект, потому под «проверить что это уже сделано» подразумевается «как понять что я случайно это уже не обеспечил»

Dmytro Svyrydenko
Честно, как фронтендер, я вроде все понял, но не у...

> Я так понимаю что чтоб понять как это обеспечивать, мне придется изрядно погуглить? Вообще, вся теоретическая база по поводу консистентности бизнес правил, которую я описал, есть в книжках по DDD (у Эванса, Вернона). Наугглить прям готовый ответ на стаковерфлов не получится скорее всего, а тем более относительно подхода с жирными сервисами.

Dmytro Svyrydenko
Если что, систему пишу я сам и это пет проект, пот...

Много кто пихает логику в сервисы, много кто не знает про Rich Domain Model и всем окей что бизнес правила не соблюдаются. Если это один из первых проектов на беке, то пиши как получится, а потом почитай Эванса, Вернона, Хорикова и перепиши нормально

Dmytro-Svyrydenko Автор вопроса
Dmitry Croft
Много кто пихает логику в сервисы, много кто не зн...

Но даже в контекте «как получится», выносить логику обновления балансов в хуки модели не лучшее решение, верно? Лучше оставить в сервисах и покрыть юнит-тестами? Я так понимаю в хуках лучше всего как-то форматировать/валидировать данные, но не более

Dmytro-Svyrydenko Автор вопроса

Под Active Record можно подразумевать что модель содержит методы для CRUD данных самой модели? Если так, то да. И да, это sequelize

Dmytro Svyrydenko
Под Active Record можно подразумевать что модель с...

Acrive Record это когда объект строка из таблички. Который сам себя умеет обновлять, как правило

Dmytro Svyrydenko
Но даже в контекте «как получится», выносить логик...

>выносить логику обновления балансов в хуки модели не лучшее решение, верно? Ну главное не размазывать бизнес логику по всем слоям. Если выбрал сервисы, то держи её в сервисах. А в хуки можно класть любую другую логику

Dmytro-Svyrydenko Автор вопроса
Dmitry Croft
>выносить логику обновления балансов в хуки модели...

Что ж, в принципе, логично 🙂 Спасибо за много инфы!

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта