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

Вопрос как вы следуете подходу Clean architecture в гошных сервисах. По

феншую это когда useCases не знают детали реализации репозиториев и просто обращаются по интерфейсу.
Например есть UserRepository интерфейс, есть его имплементация в PostgreSQL, в usecases в конструкторе инджектим интерфейс репозитория и вуаля, доменный слой не обращается к инфраструктуре.

Но есть проблема. Допустим я хочу в одной транзакции сходить и что-то сделать в нескольких репозиториях.
Тогда в usecase нужно где-то эту транзакцию начать, и передавать её в репозитории.
Но получается, что usecases уже знают о деталях реализации нашего хранилища, так как открывают транзакцию.

Вопрос, как вы работаете с транзакциями, пытаясь следовать принципам чистой архитектуры?

20 ответов

22 просмотра

Оно? https://github.com/dimuska139/go-api-layout/blob/master/internal/services/shrink.go#L30

чтобы отделить управление доменной сущностью и бизнес логику

Николай-Оськин Автор вопроса
Dmitriy Sviridov
Оно? https://github.com/dimuska139/go-api-layout/b...

ну вот мы примерно так же делали, но тогда слою usecases (у тебя services) известно о том, что нужно транзакцию стартовать. перед походом в репозитории. То есть этот слой уже опирается на инфраструктуру.

Николай Оськин
ну вот мы примерно так же делали, но тогда слою us...

а я ему говорил что это надо выносить или создавать бизнес транзакции

Artur Karapetov
а я ему говорил что это надо выносить или создав...

А чего говорить, ты ссылку на гитхаб кидай

Dmitriy Sviridov
А чего говорить, ты ссылку на гитхаб кидай

я помню что обещал ( нет времени сейчас

Если вы хотите транзакции в usecases, то у вас протекли абстракции

Николай-Оськин Автор вопроса
Евгений Омельченко
Если вы хотите транзакции в usecases, то у вас про...

да, раскройте мысль пожалуйста, как их юзать без протечек

Николай Оськин
да, раскройте мысль пожалуйста, как их юзать без п...

лично я сейчас юзаю транзакции только на уровне репозитория а на уровне usecase у меня бизнес транзакции с ручным роллбеком (то есть я не пользуюсь транзакциями в БД в данных кейсах)

Николай Оськин
да, раскройте мысль пожалуйста, как их юзать без п...

Транзакции нужны, чтобы собирать модель из разрозненных нормализованных таблиц и делать обратное преобразование

Artur Karapetov
лично я сейчас юзаю транзакции только на уровне ре...

в спринге transactional пишут над функциями сервиса?

Artur Karapetov
usecase и над сервисами, да

почему? Сервис же не имеет отношения к бд нижележащей, а transactional пишется все же над сервисом.

Николай-Оськин Автор вопроса
Евгений Омельченко
Транзакции нужны, чтобы собирать модель из разрозн...

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

Rostislav Teryaev
почему? Сервис же не имеет отношения к бд нижележа...

https://github.com/dikkini/askyourday/blob/master/src/main/java/com/askyourday/service/YetUserDetailsServiceImpl.java

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта