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

Всем привет. есть вопрос на счет транзакций и чистой архитектуры. у меня

есть слой service и есть repository.

как лучше реализовать транзакционность запросов к бд?
Допустим у меня есть методы: Insert() и List().

1) В сервисном слое написать что то типа s.db.BeginTransaction() и внунтри вызывать методы Insert(tx), List(tx).

2) Спрятать весь этот функционал внутри репозитория?

3 ответов

21 просмотр
Alisher- Автор вопроса

Это плохо когда репозиторий знает слишко много о реализации того или иного метода, поэтому я рассматриваю и первой варик

Alisher
Это плохо когда репозиторий знает слишко много о р...

Если транзакции базы данных вы используете, чтобы собирать нормализованные данные из нескольких таблиц в один "объект", то это как раз валидная задача для слоя данных, ей незачем протекать на уровень бизнес-логики Если вы бизнес-транзакции реализовываете через транзакции уровня базы данных, то это уже не чистая архитектора просто. Независимость от способа хранения данных нарушается и переехать на нереляционную или полуреляционную базу уже не получится. Не всегда отказ от чистой архитектуры это плохо, просто тут нужно решение принять при осознании рисков

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

При переходе на другой сторадж будет транзакция которая ничего не делает. Другой вопрос, что в принципе уже не будет возможность перехода на другой сторадж, который не поддерживает транзакции

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта