Size: a a a

2020 April 24

/

/dev/null in Go-go!
Oleg Kovalov
ну интерфейс с БД был бы в auth.go, где эта абстракция и нужна, в store/psql лежала бы просто реализация
спасибо
источник

OK

Oleg Kovalov in Go-go!
пакеты совсем независимы, все круто, все по коробочкам лежит, соединяются в одном месте - в месте передачи реализации в auth
источник

C

Calculon in Go-go!
Oleg Kovalov
ну интерфейс с БД был бы в auth.go, где эта абстракция и нужна, в store/psql лежала бы просто реализация
Если эта абстракция нужна много где
источник

C

Calculon in Go-go!
Тянуть интерфейс из auth?
источник

C

Calculon in Go-go!
Чото как то не то
источник

OK

Oleg Kovalov in Go-go!
Calculon
Тянуть интерфейс из auth?
да нет, не нужно. зачем тебе тянуть абстракцию, которая нудна для auth в какой-то billing? billing должен сам определять то, что нужно ему
источник

OK

Oleg Kovalov in Go-go!
имх, экспортить интерфейсы - странно, разве что для проверки реализации, что удовляетворяет интерфейсу

тип
package postgres
var _ authAuthStore = (*PostgresStore)(nil)
type PostgresStore struct {}
источник

C

Calculon in Go-go!
Oleg Kovalov
да нет, не нужно. зачем тебе тянуть абстракцию, которая нудна для auth в какой-то billing? billing должен сам определять то, что нужно ему
Ок, идея ясна
источник

/

/dev/null in Go-go!
Oleg Kovalov
да нет, не нужно. зачем тебе тянуть абстракцию, которая нудна для auth в какой-то billing? billing должен сам определять то, что нужно ему
вы хотите сказать что не нужно реализовывать весь интерфейс store, а лишь его части только там где это действительно нужно.
А где-то где вызывается вся эта история уже сконфигурировать все по мере необходимости?
источник

OK

Oleg Kovalov in Go-go!
Calculon
Тянуть интерфейс из auth?
если ты такое делаешь-видишь, то у тебя абстракция чуть растеклась, эт не страшно, ведь работает,но компоненты начинают быть связанными и это не всегда долгосрочно

(представь  auth начнет зависить от billing, тип проверить, пользователь оплатил что-то или нет, и всё, попал, циклическая зависимость в го запрещена, а так были бы разные интерфейсы и не было бы проблемок)
источник

OK

Oleg Kovalov in Go-go!
/dev/null
вы хотите сказать что не нужно реализовывать весь интерфейс store, а лишь его части только там где это действительно нужно.
А где-то где вызывается вся эта история уже сконфигурировать все по мере необходимости?
именно
источник

/

/dev/null in Go-go!
Oleg Kovalov
именно
ок, с этой стороны я пытался заходить, но как-то не пошло, нужно еще раз попробовать.
спасибо за совет
источник

OK

Oleg Kovalov in Go-go!
auth определяет свой Store { GetUser, AddUser}
billing определяет свой Store { AddMoney, HaveMoney }

и оба эти интерфейса могут быть(а могут и нет) реализованы в пакете store для одной структуруы PostgresStore
источник

OK

Oleg Kovalov in Go-go!
в итоге auth & billing ничего не знают, что в них передают и как (сегодня постгрес, завтра монго, а послезавтра какой-то там mock). они просто хотят тот интерфейс, который им нужен
источник

OK

Oleg Kovalov in Go-go!
копипастить такие модули в другие проекты или выносить в сервисы - просто песня)
источник

/

/dev/null in Go-go!
Oleg Kovalov
копипастить такие модули в другие проекты или выносить в сервисы - просто песня)
это главное)
источник

RS

Roman Sharkov in Go-go!
Andrei 🦉 Sergeev
я бы рекомендовал для долгоживущего кэша использовать более специализированные решения, которые работают вне gc, типа https://github.com/coocood/freecache
источник

OK

Oleg Kovalov in Go-go!
а тож самое - сериализовать надо будет. + там eventual consistency, надо знать
источник

RS

Roman Sharkov in Go-go!
Oleg Kovalov
а тож самое - сериализовать надо будет. + там eventual consistency, надо знать
synchronize всмсл?
источник

OK

Oleg Kovalov in Go-go!
Roman Sharkov
synchronize всмсл?
в смысле, что там аммортизация при удалении как помню
источник