Добрый день, я начал изучать написание серверов на golang на фреймворке gin. Сейчас настраиваю все вспомогательные структуры и зависимости. В первом своем проекте я использован всего лишь одну бд, но сейчас я планирую огромный проект, который включает в себя postgresql, mongoDB и Redis. И вот проблема:
Когда была всего одна бд, то container выглядел так:
type container struct {
config *config.Config
rep repository.Repository
logger logger.Logger
}
А репозиторий реализовывал postgresql методы.
type Repository interface {
Model(value interface{}) *gorm.DB
Select(query interface{}, args ...interface{}) *gorm.DB
Find(out interface{}, where ...interface{}) *gorm.DB
Exec(sql string, values ...interface{}) *gorm.DB
First(out interface{}, where ...interface{}) *gorm.DB
Raw(sql string, values ...interface{}) *gorm.DB
Create(value interface{}) *gorm.DB
Save(value interface{}) *gorm.DB
Updates(value interface{}) *gorm.DB
Delete(value interface{}) *gorm.DB
Where(query interface{}, args ...interface{}) *gorm.DB
Preload(column string, conditions ...interface{}) *gorm.DB
Scopes(funcs ...func(*gorm.DB) *gorm.DB) *gorm.DB
ScanRows(rows *sql.Rows, result interface{}) error
Transaction(fc func(tx Repository) error) (err error)
Close() error
DropTableIfExists(value interface{}) error
GetSQLDB() (*sql.DB, error)
Clauses(conds ...clause.Expression) *gorm.DB
AutoMigrate(value interface{}) error
}
type repository struct {
db *gorm.DB
}
type filmRepository struct {
*repository
}
Если сейчас все закидывать в один репозиторий, то получится перегруженный интерфейс. Возникла идея реализации:
type Repository interface {
Postgres() PostgresRepository
Mongo() MongoRepository
Redis() RedisRepository
}
То есть в интерфейсе хранить еще три интерфейса. Насколько это разумная структура? Просто все хочется делать сразу по уму, а не как чувствуется. Если есть альтернативные решения таких задач, то я готов их выслушать и принять к сведению