Size: a a a

2020 June 09

AS

Alexander Shavelev in Go-go!
Никита
Так у нас же реализация стореджа общий на все юзкейсы. Иннициализировали пулл коннектов, прокинули в юзкейсы. Если я открою транзакцию в этом же обьекте, то как-бы другие не смогут этого сделать
1) на скрине явно не реализация стореджа, а будто обрезанная транзакция
2) пул коннектов менеджит sql.Db сам
источник

Н

Никита in Go-go!
Alexander Shavelev
1) на скрине явно не реализация стореджа, а будто обрезанная транзакция
2) пул коннектов менеджит sql.Db сам
источник

VL

V L in Go-go!
Alexander Shavelev
у тебя интерфейс сторедж должен реализовать методы, условно CreateUser, DeleteUser

а транзакцию он создает "внутри", передавая если надо между приватными методами
Как быть, если в рамках одного usecase необходимо сделать например CreateUser и LogAction, бд одна, репозитории разные и хочется использовать общую транзакцию?
источник

AS

Alexander Shavelev in Go-go!
хм, зачем оборачивать tx   *sql.Tx в еще одну транзакцию
источник

Н

Никита in Go-go!
Daniel Podolsky
задача в чем?
В том, чтобы понять, как влепить транзакции, когда интерфейс к стореджу на каждый юзкейс отдельный
источник

Н

Никита in Go-go!
Alexander Shavelev
хм, зачем оборачивать tx   *sql.Tx в еще одну транзакцию
В каком месте?
источник

AS

Alexander Shavelev in Go-go!
Никита
В каком месте?
ну это в целом код говорит твой)
строка 35 - жесть
источник

Н

Никита in Go-go!
V L
Как быть, если в рамках одного usecase необходимо сделать например CreateUser и LogAction, бд одна, репозитории разные и хочется использовать общую транзакцию?
а репозиторий один даже допустим, на каждый юзкейс

type NotesCreateStorage interface {
LogAction(models.Action) error
CreateNote(models.Note) error
}


Типа такого
источник

AS

Alexander Shavelev in Go-go!
V L
Как быть, если в рамках одного usecase необходимо сделать например CreateUser и LogAction, бд одна, репозитории разные и хочется использовать общую транзакцию?
я не гуру такого подхода - потому не скажу
источник

Н

Никита in Go-go!
Alexander Shavelev
ну это в целом код говорит твой)
строка 35 - жесть
просто tx: Tx?
источник

VL

V L in Go-go!
Никита
а репозиторий один даже допустим, на каждый юзкейс

type NotesCreateStorage interface {
LogAction(models.Action) error
CreateNote(models.Note) error
}


Типа такого
Плохой интерфейс, не надо так. Лучше разделить на два интерфейса и если что поставлять одну и ту же реализацию.
источник

Н

Никита in Go-go!
V L
Плохой интерфейс, не надо так. Лучше разделить на два интерфейса и если что поставлять одну и ту же реализацию.
Так выше спрашивал, делают ли так. И несколько человек делают вот таким способом
источник

VL

V L in Go-go!
Никита
Так выше спрашивал, делают ли так. И несколько человек делают вот таким способом
Одно дело когда у вас там все про Notes, а когда один интерфейс методы про разные сущности смешивает - это перебор, имхо
источник

Н

Никита in Go-go!
Я вообще не понимаю, зачем настолько абстрагироваться от стореджа. Потому что эти методы стореджа используются повсеместно, в разных юзкейсах
источник

Н

Никита in Go-go!
Жирный интерфейс в теории звучит плохо, но на практике то в чем суть его делить?
источник

RF

Roman Fedyashov in Go-go!
Никита
Я вообще не понимаю, зачем настолько абстрагироваться от стореджа. Потому что эти методы стореджа используются повсеместно, в разных юзкейсах
Абстрагироваться от стража надо только по одной причине - чтобы проще было замокапить стораж и написать тесты
источник

Н

Никита in Go-go!
Roman Fedyashov
Абстрагироваться от стража надо только по одной причине - чтобы проще было замокапить стораж и написать тесты
Даже с одним общим интерфейсом это не проблема, не обязательно прописывать реализацию каждому методу, если они не используются
источник

VL

V L in Go-go!
Никита
Жирный интерфейс в теории звучит плохо, но на практике то в чем суть его делить?
Кажется это буква I в SOLID. Зачем вам интерфейс с теми методами, что вы не используете в данном usecase?
источник

AK

Anton Kucherov in Go-go!
Никита
Я вообще не понимаю, зачем настолько абстрагироваться от стореджа. Потому что эти методы стореджа используются повсеместно, в разных юзкейсах
🤔 Если вы не понимаете, зачем вы вообще абстрагируетесь. И если вы не сталкивались с реальными проболемами вытекающими из жирных интефрейсов, зачем вы с этим заморачиваетесь? Просто идите и решаете ваши задачи, пишите код, рано или поздно вы столкнетесь с проблемами и потом будете уже их решать.
источник

J

Je in Go-go!
Никита
просто tx: Tx?
В go обычно используют встраивание без явных оберток. Встраиваешь sql.Tx и вот твоя структура уже умеет в Commit, Rollback, профит? https://godoc.org/github.com/jmoiron/sqlx#Tx
источник