@proGO

Страница 1493 из 1674
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
хрен знает как скрестить их в рамках "никто не знает про реализацию"
Хз про то ли это, но мож посмотреть реализацию gorm'а?

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
вот прям так: type SomeAppDependentShit interface { ...здесьНаборНужныхМетодов... }??? о_О
Ну я о том и говорю, просто вопрос странно поставлен

Dmitri
08.06.2018
07:03:46
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, кровь, кишки, ад }

Александр
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
ну вот это - DAO
Ага, так легче сныкать тонкости реализации БД

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

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

Александр
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
ага, а этот dbConnect - это mongodb.NewDriver
mongodb это мой пакет если что

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
что бы абстрагировать несколько разнотипных бд

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

какое тут соединение

Александр
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

что бы просто реализовать два пакета с обеотками

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

поправка ?

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

вообще абстрагировать инициализацию соединения с БД - так себе идея

Danil
08.06.2018
07:22:24
В питоне смогли

DB-API

Например

Александр
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
если мы просто возьмем query из драйвера и вытащим в интерфейс то все должно получиться
Нет, элементарно посмотри как musql и pg новые id-шники возвращают

Dmitri
08.06.2018
07:25:13
type DbConnect interface { Query(q interface{}) }
замечательно, а ЧТО конкретно ты абстрагировал сейчас?

для чего служит эта абстракция?

смотри, дальше мы идем на уровень DAO, которое уже оперирует запросами, ок

предположим, у нас есть интерфейс к мускулю и к постгре

Страница 1493 из 1674