V
мокать базу??
не всю, а только необходимые репозитории
Maksim
persistence ignorance, все дела. Но если чувак не понимает и не видет плюсов, а всяки фаулеры и бобы для него не авторитет, то чё толку с ним говорить
Алексей
Вообще давайте начнём с того, что если бизнеслогика знает про существование базы - это уже не круто. Не, если пишете маленькую программку в команде из трёх человек, то вообще без разницы.
.
В чем практичный смысл Репозитория?
Pawel
persistence ignorance, все дела. Но если чувак не понимает и не видет плюсов, а всяки фаулеры и бобы для него не авторитет, то чё толку с ним говорить
расскзывать про авторитеты и всякую белиберду, именованную бессмысленными сочетаниями, много ума не надо.
Maksim
для повелителей горутин, если угодно.
Pawel
а, ну да, ну да
Alexey
В чем практичный смысл Репозитория?
вот у меня точно такой же вопрос, только про orm
Maksim
вот у меня точно такой же вопрос, только про orm
Отделить доменный слой от хранилища.
Pawel
не всю, а только необходимые репозитории
зачем? проще создать тестовую БД и спокойно тестить по ней
Maksim
что бы понимать зачем это, надо понимать что есть доменный слой и что есть хранилище.
Алексей
А тут рассказывать и не надо на самом деле. Нужно чтобы человек сам сначала окунулся в построение архитектуры более-менее крупного приложения. Тогда он сам будет изобретать те самые репозитории.
Pawel
В чем практичный смысл Репозитория?
1. чтобы было 2. чтобы было как рассказали чуваки на конфах 3. чтобы было, как написано у дяди боба (как они это понимают) далее следует бред про БЛ слой и слой хранилища
V
зачем? проще создать тестовую БД и спокойно тестить по ней
Когда у вас очень много тестов и они часто крутятся, то в оперативке будет быстрее.
Maksim
если ты пишешь бложики на горутинах, тебе всё это не нужно) и так сойдёт.
V
отдельную тестовую БД есть смысл на интеграционное тестирование, не на юнит
V
правильно
Maksim
о, мы тут в юнит тестах ещё тестируем базу данных. Прелесть какая
Maksim
а при использовании репозиториев даже инмемори не нужна)
V
а как вы свою in-memory db подставите в код?
.
Я правильно понимаю что репозиторий мы строим по принципу структуры с методами аля Структура Post (db) Метод CreatePosts([]Post)?
Alexey
Отделить доменный слой от хранилища.
ну опять же, я видел, где это делается на уровне repository. К примеру, есть метод FindByEmail(ctx, email), в котором написан SQL запрос под нужную БД, у репозитория есть свой объект, и при отдаче он конвертит в доменный объект
Алексей
1. чтобы было 2. чтобы было как рассказали чуваки на конфах 3. чтобы было, как написано у дяди боба (как они это понимают) далее следует бред про БЛ слой и слой хранилища
Тебе уже написали, что нужно для абстрагирования и разрушения жёстких связей между теми частями системы, которые не должны быть жёстко связанными.
.
AddPost(post Post)
Ну тип того, да
.
Окей, в чем принципиально разница между вызовом метода структуры типа Post.Create()? В чем преимущества?
Aleksandr
Ну тип того, да
большая разница. репозиторий добавляет сущность в хранилище, а не создает сущность. сущность уже создана до этого
Pawel
Тебе уже написали, что нужно для абстрагирования и разрушения жёстких связей между теми частями системы, которые не должны быть жёстко связанными.
ты действительно считаешь что до тебя я не слышал никогда этого бессмысленного набора слов? я каждую неделю на конфах
Maksim
самосоздаваемая сущность?)
актив рекордом пахнет)
.
и что оно делает?
Создаёт пост )
Maksim
ты действительно считаешь что до тебя я не слышал никогда этого бессмысленного набора слов? я каждую неделю на конфах
ты зря тратишь время и зря пытаешься джунам рассказывать что они не правы. Нарвутся на вменяемых ребят, повторят за тобой и испортят карму.
Aleksandr
Создаёт пост )
так пост уже создан - ты же из него метод вызываешь
Алексей
ты действительно считаешь что до тебя я не слышал никогда этого бессмысленного набора слов? я каждую неделю на конфах
бессмысленный набор слов??? Я обычно стараюсь такого не говорить, ибо сам не без греха, но ты просто абсолютно некомпетентен как программист.
.
так пост уже создан - ты же из него метод вызываешь
Не, мы сначала инициализировали структуру с полями, потом вызвали метод на сохранение поста в Бд
V
а может это просто толстый тролль
Aleksandr
Не, мы сначала инициализировали структуру с полями, потом вызвали метод на сохранение поста в Бд
вот инициализация - это и есть создание поста. а сохранение - это сохранение
Алексей
а может это просто толстый тролль
Не бывает настолько толстых троллей (наверное).
.
вот инициализация - это и есть создание поста. а сохранение - это сохранение
Инициализировали в коде, Create - метод на создание поста в Бд
Alexander
Не бывает настолько толстых троллей (наверное).
https://ru.wikipedia.org/wiki/%D0%AD%D1%84%D1%84%D0%B5%D0%BA%D1%82_%D0%94%D0%B0%D0%BD%D0%BD%D0%B8%D0%BD%D0%B3%D0%B0_%E2%80%94_%D0%9A%D1%80%D1%8E%D0%B3%D0%B5%D1%80%D0%B0
.
и я про то же
Окей, тогда вы о чем?
.
Я спрашиваю про разницу между подходами
Pawel
бессмысленный набор слов??? Я обычно стараюсь такого не говорить, ибо сам не без греха, но ты просто абсолютно некомпетентен как программист.
ты написал бессодержательную белиберду, много слов и ноль разъяснений. Возникает вопрос - что это было?
L
Я спрашиваю про разницу между подходами
Условно, если у вас будет несколько постов, то в вашем случае каждый инстанс поста будет иметь в себе соединение с БД верно?
Aleksandr
Я спрашиваю про разницу между подходами
репозиторий - это абстрагирование от хранилища.
Pawel
если вы не поняли, то в данном случае это говорит о вашей компетенции
нет. Это говорит о том, что человек не понимает о чём он говорит и зачем
Алексей
ты написал бессодержательную белиберду, много слов и ноль разъяснений. Возникает вопрос - что это было?
Это бессодержательная белиберда бессодержательна для тебя только потому что ты просто не сталкивался с такими задачами, для которых эта белиберда становится осмысленной.
V
я его понимаю
Aleksandr
так, ладно, собственно тема исчерпала себя. Давайте закроем.
Maksim
Не кормите тролля)
V
поддерживаю
Алексей
Это бессодержательная белиберда бессодержательна для тебя только потому что ты просто не сталкивался с такими задачами, для которых эта белиберда становится осмысленной.
В этом в принципе нет ничего плохого, все такими были. А вот то, что такой человек пытается собеседовать джунов - вот это уже нехорошо.
Maksim
Скорее людей в принципе)
.
репозиторий - это абстрагирование от хранилища.
За счёт чего происходит абстракция? И почему в подходе который я предложил ее нет?
Алексей
Это бессодержательно, потому что я пример просил, а ты решил отделаться общими словами
Мне лень приводить пример, потому что в три строчки он не уместится, и даже в тридцать строчек тоже скорее всего не получится уместить.
Aleksandr
За счёт чего происходит абстракция? И почему в подходе который я предложил ее нет?
я не говорил, что ее нет. указал лишь на количество ответственностей сущности. сущность занимается не своим делом
Алексей
Да тут и примеры уже не помогут
Maksim
у тебя сущность знает как себя создать, сохранить и изменить. если она себя ещё и получать сможет, хуже не станет. тут проблема в разделении ответственности. Вариант с использованием тех же репозиториев подразумевает иную степень изоляции
Алексей
в active record сущность сама знает как себя положить в базу, а вообще не должна об этом знать, так как опять же создаёт ненужную жёсткую связь между базой и сущностью
L
За счёт чего происходит абстракция? И почему в подходе который я предложил ее нет?
В вашем подходе вы смешиваете данные и работу с этими данными. Репозиторий же предоставляет интерфейс для работы с данными. Вот условно у вас есть юзер. Юзеры могут быть в кэше и в бд. В случае с вашим подходом, нужно создавать две сущности userdb и usercache. И они будут содержать данные и работу с конкретной реализацией. А теперь выдергиваем данные юзера в отдельную структуру. Где будут только поля + два репозитория бд и кэш, которые имеют схожие интерфейсы и принимают/возвращают инстанс структуры юзера
L
таким образом вы отделяете логику работы с конкретной БД и данные
Maksim
я уже писал ранее, повторю ещё раз: это всё часть persistence ignorance
.
Либо же сделать два метода, например
L
Либо же сделать два метода, например
а потом вы захотели хранить не в mysql, а pg. Еще метод + менять во всех местах
Pawel
Мне лень приводить пример, потому что в три строчки он не уместится, и даже в тридцать строчек тоже скорее всего не получится уместить.
Если ты не в состоянии описать пользу отабстракции в нескольких словах на понятном языке , значит либо пользы нет, либо ты абстракцию не понимаешь
.
Нас в принципе не волнует откуда и как оно получает