
Maksim
20.09.2018
13:22:07

Pawel
20.09.2018
13:22:24

Bohdan
20.09.2018
13:22:27

Maksim
20.09.2018
13:22:32
просто файлик, который почему-то зовётся *repository

Google

Pawel
20.09.2018
13:22:38

Maksim
20.09.2018
13:22:45

Aleksandr
20.09.2018
13:22:51

V
20.09.2018
13:23:01
репозиторий может инкапсулировать как и массив, так и мапу
так и обращения к БД

Bohdan
20.09.2018
13:23:19
абстракция, определяющая апи базы. В ООП - в виде интерфейсов соотв.
нет, апи базы - CRUD операции над сущностями

Алексей
20.09.2018
13:23:50

Aleksandr
20.09.2018
13:24:50

Алексей
20.09.2018
13:24:51

Maksim
20.09.2018
13:25:46
массив, мапу, указатель, юникс тайм - что угодно

Алексей
20.09.2018
13:26:07

Google

Pawel
20.09.2018
13:28:24
отлично. А можно вкачстве итога этой офигеть какой полезной дискуссии приветси пример, иллюстрирующей реальную пользу от использования репозитория в качестве абстракции базы? не связанный с переносом приложения от одной субд к другой, или там от БД к веб данным

Maksim
20.09.2018
13:28:53
ты сам понимаешь что несёшь?)

Pawel
20.09.2018
13:29:08
я в самом начале разговора сказал, что таких не видел. Переходы подобные - редкость. И?

V
20.09.2018
13:29:28
покрытие юнит-тестами бизнес-логики с использованием реализации репозитория в оперативной памяти

Pawel
20.09.2018
13:29:52

Maksim
20.09.2018
13:30:35

V
20.09.2018
13:30:48

Maksim
20.09.2018
13:31:34
persistence ignorance, все дела. Но если чувак не понимает и не видет плюсов, а всяки фаулеры и бобы для него не авторитет, то чё толку с ним говорить

Алексей
20.09.2018
13:32:07
Вообще давайте начнём с того, что если бизнеслогика знает про существование базы - это уже не круто. Не, если пишете маленькую программку в команде из трёх человек, то вообще без разницы.

Никита
20.09.2018
13:32:43
В чем практичный смысл Репозитория?

Pawel
20.09.2018
13:33:19

Maksim
20.09.2018
13:33:38
для повелителей горутин, если угодно.

Pawel
20.09.2018
13:34:01
а, ну да, ну да

Алексей
20.09.2018
13:34:24

Maksim
20.09.2018
13:34:51

Pawel
20.09.2018
13:34:57

Maksim
20.09.2018
13:35:11
что бы понимать зачем это, надо понимать что есть доменный слой и что есть хранилище.

Алексей
20.09.2018
13:35:13
А тут рассказывать и не надо на самом деле. Нужно чтобы человек сам сначала окунулся в построение архитектуры более-менее крупного приложения. Тогда он сам будет изобретать те самые репозитории.

Google

Pawel
20.09.2018
13:35:54
В чем практичный смысл Репозитория?
1. чтобы было
2. чтобы было как рассказали чуваки на конфах
3. чтобы было, как написано у дяди боба (как они это понимают)
далее следует бред про БЛ слой и слой хранилища

V
20.09.2018
13:36:15

Maksim
20.09.2018
13:36:20
если ты пишешь бложики на горутинах, тебе всё это не нужно) и так сойдёт.

V
20.09.2018
13:36:54
отдельную тестовую БД есть смысл на интеграционное тестирование, не на юнит

Pawel
20.09.2018
13:37:09

V
20.09.2018
13:37:19
правильно

Maksim
20.09.2018
13:37:20
о, мы тут в юнит тестах ещё тестируем базу данных. Прелесть какая
а при использовании репозиториев даже инмемори не нужна)

V
20.09.2018
13:37:35
а как вы свою in-memory db подставите в код?

Никита
20.09.2018
13:37:36
Я правильно понимаю что репозиторий мы строим по принципу структуры с методами аля
Структура Post (db)
Метод CreatePosts([]Post)?

Алексей
20.09.2018
13:37:58
Отделить доменный слой от хранилища.
ну опять же, я видел, где это делается на уровне repository. К примеру, есть метод FindByEmail(ctx, email), в котором написан SQL запрос под нужную БД, у репозитория есть свой объект, и при отдаче он конвертит в доменный объект

Алексей
20.09.2018
13:37:58

Максим
20.09.2018
13:38:01

Никита
20.09.2018
13:38:11
Окей, в чем принципиально разница между вызовом метода структуры типа Post.Create()? В чем преимущества?

Aleksandr
20.09.2018
13:38:48
Ну тип того, да
большая разница. репозиторий добавляет сущность в хранилище, а не создает сущность. сущность уже создана до этого

Алексей
20.09.2018
13:38:57

Maksim
20.09.2018
13:39:03

Pawel
20.09.2018
13:39:07

Aleksandr
20.09.2018
13:39:09

Google

Maksim
20.09.2018
13:39:31

Никита
20.09.2018
13:40:21

Maksim
20.09.2018
13:40:33

Никита
20.09.2018
13:40:35

Aleksandr
20.09.2018
13:40:37

Алексей
20.09.2018
13:40:50

Никита
20.09.2018
13:41:24

V
20.09.2018
13:41:29
а может это просто толстый тролль

Aleksandr
20.09.2018
13:41:50

Admin
ERROR: S client not available

Алексей
20.09.2018
13:41:51

Никита
20.09.2018
13:42:20

Aleksandr
20.09.2018
13:42:30

Alexander
20.09.2018
13:42:42

Никита
20.09.2018
13:42:51
Я спрашиваю про разницу между подходами

Pawel
20.09.2018
13:43:27

Алексей
20.09.2018
13:43:30

Lesha
20.09.2018
13:43:44

Aleksandr
20.09.2018
13:43:49

Google

V
20.09.2018
13:43:59

Pawel
20.09.2018
13:44:41

Алексей
20.09.2018
13:44:45

V
20.09.2018
13:44:49
я его понимаю

Aleksandr
20.09.2018
13:45:16
так, ладно, собственно тема исчерпала себя. Давайте закроем.

Maksim
20.09.2018
13:45:20
Не кормите тролля)

V
20.09.2018
13:45:23
поддерживаю

Алексей
20.09.2018
13:46:01

Maksim
20.09.2018
13:46:28
Скорее людей в принципе)

Pawel
20.09.2018
13:51:19

Никита
20.09.2018
13:51:52

Алексей
20.09.2018
13:53:35

Aleksandr
20.09.2018
13:53:54

Алексей
20.09.2018
13:54:03
Да тут и примеры уже не помогут

Maksim
20.09.2018
13:54:13
у тебя сущность знает как себя создать, сохранить и изменить. если она себя ещё и получать сможет, хуже не станет.
тут проблема в разделении ответственности. Вариант с использованием тех же репозиториев подразумевает иную степень изоляции

Алексей
20.09.2018
13:55:53
в active record сущность сама знает как себя положить в базу, а вообще не должна об этом знать, так как опять же создаёт ненужную жёсткую связь между базой и сущностью

Lesha
20.09.2018
13:55:59
За счёт чего происходит абстракция? И почему в подходе который я предложил ее нет?
В вашем подходе вы смешиваете данные и работу с этими данными.
Репозиторий же предоставляет интерфейс для работы с данными.
Вот условно у вас есть юзер. Юзеры могут быть в кэше и в бд. В случае с вашим подходом, нужно создавать две сущности userdb и usercache. И они будут содержать данные и работу с конкретной реализацией.
А теперь выдергиваем данные юзера в отдельную структуру. Где будут только поля + два репозитория бд и кэш, которые имеют схожие интерфейсы и принимают/возвращают инстанс структуры юзера
таким образом вы отделяете логику работы с конкретной БД и данные

Maksim
20.09.2018
13:56:49
я уже писал ранее, повторю ещё раз: это всё часть persistence ignorance

Никита
20.09.2018
13:56:54
Либо же сделать два метода, например