
Olzhas
08.06.2018
07:00:29
и жабу

The
08.06.2018
07:00:49
допустим, type User model {}
type MySQLUserRepository struct {}
type UserRepository interface {
ByID(id int64) (User, error)
}
что-то типо того

FRD Official - Dmitriy
08.06.2018
07:01:03

Google

Dmitri
08.06.2018
07:01:57

Dmitri
08.06.2018
07:02:44
Ээээ... интерфейс
вот прям так: type SomeAppDependentShit interface { ...здесьНаборНужныхМетодов... }??? о_О

Александр
08.06.2018
07:02:57
Ээээ... интерфейс
ну я решил кормить контролеры именно интерфейсом dbConnect, реализацию возращают при этом конкретный драйвер

FRD Official - Dmitriy
08.06.2018
07:03:22

Dmitri
08.06.2018
07:03:46

The
08.06.2018
07:04:06

Dmitri
08.06.2018
07:04:09
один хрен придется чем-то поверх обмазывать...

FRD Official - Dmitriy
08.06.2018
07:05:03
какая-то абстракция ради абстракции
type User struct {
Name string
}
type Database interface {
GetUserByName(s string) (u User)
}
type DatabasePostgres struct {
}
func (Database *d) GetUserByName(s string) (u User) {
// sql, кровь, кишки, ад
}

Dmitri
08.06.2018
07:05:11
собственно, из известных подходов - DAO и репозиторий

Александр
08.06.2018
07:06:33
myDbHandler := mongodb.NewDriver(...login/pass/host/port...) // dbConnect
handler := &mySuperSite.IndexHandler{ db: myDbHandler } // Http.handler
---- Внутри handler -----
d := IndexPageDao.New(h.db)

FRD Official - Dmitriy
08.06.2018
07:06:44

Google

Александр
08.06.2018
07:06:45
что-то такое выходит

Dmitri
08.06.2018
07:07:06
только type Database interface - хреновый выбор именования для такой штуки, это (зануда моде он) не база данных

FRD Official - Dmitriy
08.06.2018
07:08:13

Dmitri
08.06.2018
07:08:26

Александр
08.06.2018
07:08:42
в смысле чего?
я хотел как раз абстрагироваться от базы, что бы дао кормился уже непонятно чем

Dmitri
08.06.2018
07:09:34
в смысле того, что IndexPageDAO получает DB-инстанс, и внутри работает с методами конкретной реализации БД напрямую
непонятно, зачем тут эта "абстракция", т.к. она ничего не абстрагирует, а просто хранит ссылку на конкретную монгу

Александр
08.06.2018
07:10:12
ну сдрасти приехали
внутри он работает с интерфейсом dbConnect
не знаю там с единой функцией query

The
08.06.2018
07:10:38
смотри
абстрагируйся вообще от всей логики получения

Dmitri
08.06.2018
07:10:52
ага, а этот dbConnect - это mongodb.NewDriver
т.е. он получит интерфейс монги

Александр
08.06.2018
07:11:07

Dmitri
08.06.2018
07:11:16
и заменить эту монгу ты ни на что не сможешь
если вместо нее ты подсунешь постргре - все поломаеццо к хуям

Александр
08.06.2018
07:11:41
схуяли?
я же должен реализовать интерфейс connect

Google

The
08.06.2018
07:11:48
что возвращает у тебя NewDriver?

Dmitri
08.06.2018
07:11:55
не должен

Александр
08.06.2018
07:12:10
там же написано
только это мой интерфейс если шо

The
08.06.2018
07:12:35
ну и из чего он состоит-то?
может он пустой епта

Александр
08.06.2018
07:12:55
вот в этом и вопрос, как его кошерно спроектировать

Dmitri
08.06.2018
07:12:57
ты должен реализовать набор методов, который абстрагирует весь механизм получения данных от слоя логики

Александр
08.06.2018
07:13:10
что бы абстрагировать несколько разнотипных бд

Dmitri
08.06.2018
07:13:14

The
08.06.2018
07:13:14
ну вот тебе и ответ, делай репозиторий интерфейс

The
08.06.2018
07:13:18
я же тебе сказал уже

Dmitri
08.06.2018
07:13:33
dbConnect - плохая сущность для абстракции
потому что dbConnect - это "соединение с базой". А оно а) не слишком универсально; б) начинается с маленькой буквы, т.е. приватное, и хрен ты где его заюзаешь

Александр
08.06.2018
07:15:18
ну тут я конечно на коленке писал пример, DBConnect тогда уж

The
08.06.2018
07:15:24
type UserRepository interface {
ByID(int64) (User, error)
ByName(string) (User, error)
}
а затем создавай
type MySQLUserRepository struct {
db *sql.DB
}
func (ur MySQLUserRepository) ByID(id int64) (User, error) {
ur.db.Query()// твой запрос и т.д.
}

Александр
08.06.2018
07:15:32
и как это соединиение не является универсальным?

Dmitri
08.06.2018
07:15:49
и, скажем так, абстракция, объединяющая соединение с постгре и соединение с но-скулем каким-нибудь, должна быть уровнем выше

The
08.06.2018
07:15:50
бля, не думай про источник данный как про соединение

Google

The
08.06.2018
07:16:00
а если у тебя в файле, в котором JSON
какое тут соединение

Dmitri
08.06.2018
07:16:24

Александр
08.06.2018
07:17:11
странное название для интерфейса - DataSource

FRD Official - Dmitriy
08.06.2018
07:17:30
Вот готовый пример https://github.com/censhin/repository-pattern-go

Dmitri
08.06.2018
07:17:36
наружу из твоей абстракции должны торчать методы получения бизнес-сущностей

Александр
08.06.2018
07:17:54
это внутри хедлера же

FRD Official - Dmitriy
08.06.2018
07:18:03

Dmitri
08.06.2018
07:18:16
идея передать в хендлер констракт соединения - плохая идея

Admin
ERROR: S client not available

Dmitri
08.06.2018
07:18:26
передай готовый объект

Александр
08.06.2018
07:18:38
передавать уже дао?

Dmitri
08.06.2018
07:19:01
по сути - да

Александр
08.06.2018
07:19:13
а дао тоже надо чем то кормить если шо

Dmitri
08.06.2018
07:19:34
а дао тебе придется реализовывать целиком на каждый вид источника данных

FRD Official - Dmitriy
08.06.2018
07:19:48
И про ДАО https://github.com/gustavocd/dao-pattern-in-go

Dmitri
08.06.2018
07:20:06
простейший случай DAO - CRUD
его проектировать не надо, он "концептуально готовый", хоть и тупой)

Александр
08.06.2018
07:20:36
а ничего что бд иницилизация может быть строк на 30? это все в main курить или предлагаешь копипастить в каждый dao?

Google

Александр
08.06.2018
07:20:54
для этого я и наплодил DbConnect
что бы просто реализовать два пакета с обеотками

Dmitri
08.06.2018
07:21:04
не смешивай

Александр
08.06.2018
07:21:27
инициализация КОННЕКТА к бд
поправка ?

Dmitri
08.06.2018
07:21:43
если у тебя соединение с постгре и соединение с мускулем инициируются одинаково, это НЕ значит, что все-все-все ляжет в ту же логику
вообще абстрагировать инициализацию соединения с БД - так себе идея

Danil
08.06.2018
07:22:24
В питоне смогли
DB-API
Например

FRD Official - Dmitriy
08.06.2018
07:22:41

Александр
08.06.2018
07:23:09
вопрос как абстрагировать

DMITRY
08.06.2018
07:23:13
я чет не представляю реальной пользы от универсального драйвера для sql и nosql
а чисто для sql давно уже есть unixoodbc

Александр
08.06.2018
07:23:32
если мы просто возьмем query из драйвера и вытащим в интерфейс то все должно получиться
type DbConnect interface {
Query(q interface{})
}

DMITRY
08.06.2018
07:24:07
https://github.com/weigj/go-odbc

FRD Official - Dmitriy
08.06.2018
07:24:36

Dmitri
08.06.2018
07:25:13
для чего служит эта абстракция?
смотри, дальше мы идем на уровень DAO, которое уже оперирует запросами, ок
предположим, у нас есть интерфейс к мускулю и к постгре