
Daniel
11.01.2017
10:13:55
Ща вспомнил, что какую-то вещь тут скидывали, где какая-то "методология" разработки применяется, где экшен контроллера - это отдельный класс, там как-то слишком умно называется, я не помню
Можете кто нибудь подкинуть?
Т.е. на каждый запрос - отдельный класс
Вроде как
Ой, сколько у меня тавтологии...

Google

Алексей
11.01.2017
10:15:01
Да скорее всего как-нибудь и называется типа Action Class.

Daniel
11.01.2017
10:15:12
Не, там именно философия какая-то

Алексей
11.01.2017
10:16:02
Ну, то есть с Платоном и афинянами?

Daniel
11.01.2017
10:16:49
Я даж где-то читал, натыкался, что контроллером правильно называть метод класса, то бишь экшен
А не сам класс

Дмитрий
11.01.2017
11:44:01
подскажите как настроить подключение к двум базам на разных серверах

Алексей
11.01.2017
11:44:50
Документация же, не?
https://symfony.com/doc/current/doctrine/multiple_entity_managers.html

Дмитрий
11.01.2017
11:46:56
пропустил этот раздел :( спасибо

Алексей
11.01.2017
11:47:36
Ну, если что, гугл спасает. Я туда написал "Symfony Doctrine multiple databases" и оно на первой строчке было :)
Опыт показывает, что если начать гуглить на английском, релевентность результатов вырастает в разы.

finkel
11.01.2017
12:59:04
Как думаете? есть ли смысл морочиться с разными методами в репозитории для разных степеней "заполненности" объекта?)
Все тот же пример из моего блога, с авторами, их постами и заметками.
В репозитории автора у меня есть метод getQuery, который собирает запрос с двумя джоинами, репозиторий авторов использует этот запрос для получения списка авторов и на выходе у меня сразу авторы с постами и заметками, без всяких ленивых загрузок. Но, наверно, мне не всегда будут нужны и посты и заметки.
Это вообще проблема или я перезаморочился?)

Алексей
11.01.2017
13:01:49
Я думаю, что правильнее делать не методы, которые выбирают сущности с разной степенью гидрации коллекций, а целевые конкретные методы. Например, нужно получить пост с комментариям - делается метод "получить пост с комментариями". Ну, то есть, тут как с бесполезными сеттерами в сущности, пожалуй. Мне кажется, должны быть отдельные методы решающие свою задачу.

Timur
11.01.2017
13:02:50
Я тоже делаю так, как сказал комрад выше.

Google

Timur
11.01.2017
13:03:01
Вроде нормально выглядит (на мой вкус и моё ИМХО).

finkel
11.01.2017
13:06:48

Алексей
11.01.2017
13:09:26
Да, наверное. Только тут надо аккуратнее с семантикой. В том числе помнить, что такое find, а что такое get.
Ну и в целом да, получатся методы с разной степенью гидрации, но главное, как мне кажется, отталкиваться не от проблематики, а не от того, что "просто хочу несколько методов чтобы по-разному коллекции наполняли".

finkel
11.01.2017
13:11:31

Алексей
11.01.2017
13:22:26
Кстати, по поводу работы с сущностями, доктрины и всего такого, у Окрамиуса есть хороший доклад, который я бы мог советовать послушать.
https://www.youtube.com/watch?v=rzGeNYC3oz0
Его тут, скорее всего, уже кидали, но он от этого хуже не становится :)

Хэльго
11.01.2017
13:44:01

Алексей
11.01.2017
13:48:40
Я, в общем-то о таком и говорил. О контексте.
Хотя местами у меня тоже бывает getPostWithComments() когда это наиболее логично звучит в данной ситуации.

finkel
11.01.2017
14:11:15

Daniel
11.01.2017
14:19:17
Кто нибудь пользовался LexikFormFilterBundle?

Sergey
11.01.2017
16:11:34
методы репозиториев либо добавляют сущность на хранение, либо удаляют, либо возвращают одну и ровно одну сущность (или кидают исключение)
если твоя бизнес логика требует что бы репозиторий вернул коллекцию - значит ты где-то не сделал сущность которая имеет эту коллекцию
а методы вроде getAuthorsWithComments лучше выносить в отдельные классы
которые не умеют persist и которые делают тупые read-only выборки
и тогда жизнь будет чуть меньшей болью

finkel
11.01.2017
17:02:25
ааа кажись понял
но лучше будет если пояснишь))
У меня получилось как то так
AuthorRepository
+getAuthorsWithPostsQuery():qb
+getAuthorsQuery():qb
AuthorManager
+getAuthorsWithPosts():Author[]
+createAuthor():Author
+update($author) // тут работаем с базой
все как на той картинке

Google

finkel
11.01.2017
17:53:56
блин, надо себе футболку с таким принтом заказать

Sergey
11.01.2017
18:07:00

finkel
11.01.2017
18:08:25

Sergey
11.01.2017
18:10:29
ну значит делаем отдельный сервис который такими вещами занимается
можно даже круче, что бы этот сервис никогда не возвращал сущности (мэпить напрямую на DTO или массивчики)
тогда и пачки геттеров из сущностей уйдут
хотя это если ты реально будешь загоняться, так что достаточно просто вынести выборки которые ты делаешь только для UI в отдельный сервис
воимя SRP

finkel
11.01.2017
18:19:26

Sergey
11.01.2017
18:21:38
> а потом надо будет этот список получить для бизнес логики
для бизнес логики все данные должны лежать в пределах агрегата (и там должен быть корень через который ты операцию проводишь)
если у тебя какие-то правила выборки есть определенные - формируешь объект-критерию для коллекции.

finkel
11.01.2017
18:34:58
спасибо, подумаю над этим

Sergey
11.01.2017
18:39:10
я вот пытался вспомнить хоть один случай когда у меня дублировались правила выборок для логики и для UI
и не смог придумать
если кто может накинуть таких буду рад

da horsie
11.01.2017
19:28:07

finkel
11.01.2017
19:28:45

da horsie
11.01.2017
19:29:11
гм
"плохо" подразумевает "хоть как-то"
явно не мой случай

Google

da horsie
11.01.2017
19:36:18
впрочем, я кажется знаю слова "для" и "который"

Ринат
11.01.2017
19:50:54
Странно, чатик на мобилке не подгружается.

Ivan
11.01.2017
21:06:48
вот где-где, а на пикабу я такого точно не ожидал))
http://pikabu.ru/story/doctrine_best_practices__1_4327349

Хэльго
11.01.2017
22:11:51

Алексей
11.01.2017
22:33:25

Ivan
11.01.2017
22:33:57
ну да, то что было на видео

Admin
ERROR: S client not available

Ivan
11.01.2017
22:34:28
просто место размещение неожиданное:)

da horsie
11.01.2017
22:34:41
чуваки

Алексей
11.01.2017
22:34:45
Это да.

da horsie
11.01.2017
22:34:52
а поясните мне за композер
вот у меня в проекте мы коммитим vendor в репу, прям всю папку в гит

Ivan
11.01.2017
22:35:42
зря наверное)

Алексей
11.01.2017
22:35:43

da horsie
11.01.2017
22:35:44
я так понимаю, что это неправильно
но

Ivan
11.01.2017
22:35:54
правильно понимаешь)

da horsie
11.01.2017
22:36:22
что мне ответить боссу, когда он спросит, а как мол быть, если пакагист лег, а нам надо деплоить?

Алексей
11.01.2017
22:36:25
Коммитить надо composer.json и composer.lock.

Ivan
11.01.2017
22:37:02
ну локально ж вендор есть

Google

da horsie
11.01.2017
22:37:09
где локально?

Алексей
11.01.2017
22:37:11

da horsie
11.01.2017
22:37:54

ModerBot
11.01.2017
22:37:55

Ivan
11.01.2017
22:38:35

da horsie
11.01.2017
22:38:54
и стейджем
и остальными
вот представь, замержил я в мастер, дженкинс ломанулся собирать билд, а пакагист лежит
меня будут иметь всем отделом
потому что я сломал CI
своим предложением

Алексей
11.01.2017
22:40:28
Поднимите satis.
https://code.tutsplus.com/tutorials/setting-up-a-local-mirror-for-composer-packages-with-satis--net-36726

da horsie
11.01.2017
22:40:46

Алексей
11.01.2017
22:41:05
Ну впихни его к дженкинсу.

Sergey
11.01.2017
22:41:11

da horsie
11.01.2017
22:41:15
все тот же вопрос
какую выгоду получит бизнес?