Alexander
16.10.2017
11:44:42
Покажи код, как то все абстрактно. Какие у тебя методы в родительском классе?
AlekVolsk
16.10.2017
11:44:50
ок, что тогда подразумеваешь под репозиторием
F01134H
16.10.2017
11:44:59
еще фильтровать, упорядочивать, сортировать - при желании можно наращивать для этого функционал
Google
Alexander
16.10.2017
11:45:17
Андрэ
16.10.2017
11:45:23
Фолли, считает что реп - это просто коллекция, которая не знает, как и где хранится. Это делает кто-то другой
F01134H
16.10.2017
11:45:24
Но не получать напрямую из базы данных
Да
Patrik
16.10.2017
11:45:48
ок, ты уберешь из него запросы, что в нем останется?
F01134H
16.10.2017
11:45:56
То, что означает слово "репозиторий"?
AlekVolsk
16.10.2017
11:46:11
и как они хранятся?
F01134H
16.10.2017
11:46:21
Как ты хочешь, не?)
причем тут вообще это?
Patrik
16.10.2017
11:46:29
хранилище данных это твоя бд, работаешь ты с ней запросами, запросы вынес из репозитория, что в нем осталось?
AlekVolsk
16.10.2017
11:46:32
хранилище == бд, не?
F01134H
16.10.2017
11:46:40
Блять...
Google
F01134H
16.10.2017
11:46:53
Короче, я жду ответов тех, кто знает, что такое репозиторий
а не кто прочитал это только что в гугле
AlekVolsk
16.10.2017
11:47:12
у всех разное понятие репозитория
F01134H
16.10.2017
11:47:26
http://design-pattern.ru/patterns/repository.html
Patrik
16.10.2017
11:47:34
ты сам не можешь ответить на элементарный вопрос
F01134H
16.10.2017
11:48:08
Читайте
и вникайте
Для тех кому лень:
Объекты-клиенты создают описание запроса декларативно и направляют их к объекту-репозиторию (Repository) для обработки. Объекты могут быть добавлены или удалены из репозитория, как будто они формируют простую коллекцию объектов. А код распределения данных, скрытый в объекте Repository, позаботится о соответсвующих операциях в незаметно для разработчика. В двух словах, паттерн Repository инкапсулирует объекты, представленыые в хранилище данных и операции, производимые над ними, предоставляя более объектно-ориентированное представление реальных данных. Repository также преследует цель достижения полного разделения и односторонней зависимости между уровнями области определения и распределения данных.
объекты-клиенты
Asset
16.10.2017
11:48:53
/link@yetanotherstatsbot
Yet Another Stats
16.10.2017
11:48:54
https://yasb.exileed.com/telegram/chat/1001042383571
Alexander
16.10.2017
11:49:12
Блять...
да это нормально. У тебя же базовый класс определяет что умеет репоз, а наследник реализует это каким то образом.
FaqRepository -> FaqRepositoryEloquent
Андрэ
16.10.2017
11:49:49
Ну скорее не базовый класс, а интерфейс
AlekVolsk
16.10.2017
11:50:06
коротко: объект, работающий с бд непосредственно по запросу извне, но по сути интерфейс обработки данных на уровне хранилища
Андрэ
16.10.2017
11:50:21
А так да. Конкретная реализация репозитория знает как хранить/доставать данные
F01134H
16.10.2017
11:50:56
Если взять пример, то это как если бы ваш сейф сам решал, что делать с вашими деньгами
Андрэ
16.10.2017
11:51:09
PostCacheRepository, PostDatabaseRepository (имена для наглядности)
AlekVolsk
16.10.2017
11:51:12
неудачная аналогия
F01134H
16.10.2017
11:51:17
удачная
AlekVolsk
16.10.2017
11:51:20
сейф == бд
Google
Alexander
16.10.2017
11:51:22
F01134H
16.10.2017
11:51:25
от выборки до INSERT'ов один шаг
Patrik
16.10.2017
11:51:26
решает клиентский код что делать, сейф только предоставляет для этого методы
AlekVolsk
16.10.2017
11:51:36
репозиторий - ключ от сейфа
Patrik
16.10.2017
11:52:54
скорее не ключ, а клерк, который тебе говорит какие операции ты можешь делать с деньгами при этом самого сейфа можешь и не видеть, деньги лежат у него в левом носке
F01134H
16.10.2017
11:53:25
http://designpatternsphp.readthedocs.io/ru/latest/More/Repository/README.html
AlekVolsk
16.10.2017
11:53:42
в любом случае, клерк. владеющий ключами от сейфа
Андрэ
16.10.2017
11:53:49
И клерк сам достаёт из сейфа, а не просит посредника какого-то
F01134H
16.10.2017
11:54:10
Репа хранит данные, которые уже были получены, она не должна сама получать данные, для этого есть ОРМ
Андрэ
16.10.2017
11:54:22
Patrik
16.10.2017
11:55:07
F01134H
16.10.2017
11:55:37
ну да
стоп, нет
Patrik
16.10.2017
11:55:53
F01134H
16.10.2017
11:56:08
как это не ключевой момент
Patrik
16.10.2017
11:56:17
стоп, нет
если они у тебя в массиве в памяти лежат, глупо выделить этот механизм из репозитория еще в одну абстракцию
AlekVolsk
16.10.2017
11:56:17
хранилицем может быть что угодно, репа просто предоставляет интерфейс работы с ним
F01134H
16.10.2017
11:56:19
какого хрена хранилище данных само данные получает внутри себя
Андрэ
16.10.2017
11:56:23
Он может брать данные сам из хранилища, может через кого-то. Он не эту проблему решает
F01134H
16.10.2017
11:56:35
данные нужно получить, данные нужно положить в хранилище - это логично
Google
F01134H
16.10.2017
11:56:44
то что хранилище получает внутрь себя данные - это не нормально
AlekVolsk
16.10.2017
11:56:55
интерфейс может взаимодействовать с хранилищем как напрямую, так и через орм. это уже частности
F01134H
16.10.2017
11:57:19
неизвестно какие данные оно получает из базы данных, ты это не контролируешь, когда у тебя данные внутри репы забираются
Андрэ
16.10.2017
11:57:42
Реп не хранилище, это интерфейс доступа к данным. Он и не хранит ничего
F01134H
16.10.2017
11:57:50
или вы хотите сказать, репа должна еще и данные валидировать?
Patrik
16.10.2017
11:57:55
у репозитория нет состояния, он ничего не хранит
F01134H
16.10.2017
11:57:56
полученные из бд?
AlekVolsk
16.10.2017
11:58:22
задача - передать в репу запрос и получить ответ, как репа будет этот запрос обрабатывать, посредством орм или напрямую файл читать - это дело десятое
Андрэ
16.10.2017
11:58:28
Предоставляет интерфейс доступа к данным
Sergey
16.10.2017
11:58:38
если у тебя нет никакого фреймворка для мапинга, то твой репос будет сам получать данные и мапить их сам или через делегацию другим классам
в контексте доктрины ты пишешь критерии для выборок, можешь взять DQL, а можешь хоть dbal коннект выдернуть и делать тоже самое через native query
репос должен всегда работать только с обьектами, которые ему принадлежат. если в репосе появляются getTotalPages(), getStatistics, getMap и прочая хрень, то это уже DAO
Андрэ
16.10.2017
11:59:25
F01134H
16.10.2017
11:59:30
то что он должен работать со своими данными, а не с данными из бд
которые неясно как он получает
Sergey
16.10.2017
11:59:54
Patrik
16.10.2017
11:59:57
Вот, я о том и говорю
но это частный случай, это не значит что репозиторий вообще никогда не должен сам забирать данне
F01134H
16.10.2017
12:00:04
Андрэ
16.10.2017
12:00:09
F01134H
16.10.2017
12:00:11
это звезды так сошлись
Google
Андрэ
16.10.2017
12:00:32
Реп может сам брать данные из БД
AlekVolsk
16.10.2017
12:00:59
в общем, кто во что горазд ))
F01134H
16.10.2017
12:01:20
Sergey
16.10.2017
12:01:27
Alexander
16.10.2017
12:01:39
Андрэ
16.10.2017
12:01:46
AlekVolsk
16.10.2017
12:01:50
в любом случае, все зависит от задач, иногда реп просто не нужен )
Андрэ
16.10.2017
12:02:01
Sergey
16.10.2017
12:02:11
по факту важен интерфейс репоса, у которого есть четкие сигнатуры на выборки. а то как это сделано, ну такое)
хоть с файликов читай
F01134H
16.10.2017
12:02:33
да я съем свою шляпу если хоть раз в репозитории буду забирать данные из бд
Андрэ
16.10.2017
12:02:49
Не забирай, делов то)
Sergey
16.10.2017
12:02:54
покажи пример реализации хоть одного метода в репосе у тебя
Андрэ
16.10.2017
12:03:07
Только как ты получать данные будешь?
F01134H
16.10.2017
12:03:14
конкретно у меня нет репозитория, пока что не делал
Patrik
16.10.2017
12:03:36
не зацикливайся на том, что за репо может быть только бд и только какая-то РСУБД с ОРМ
F01134H
16.10.2017
12:03:38
Андрэ
16.10.2017
12:03:45
Например
Sergey
16.10.2017
12:04:27
/**
* @return User[]
*/
public function getDataAdmin()
{
return $this->createQueryBuilder('u')
->where('u.roles LIKE :role')
->setParameter('role', '%ROLE_DATA_ADMIN%')
->getQuery()
->getResult();
}
вот например
F01134H
16.10.2017
12:04:38
Например
например стандартные коллекции в ларавеле - это репозиторий
Андрэ
16.10.2017
12:04:44
Нет