@symfony_php

Страница 350 из 1418
Sergey
23.10.2017
21:17:50
сча затестим

не затестим(

повис терминал

Sergey
23.10.2017
21:20:22
да, работает

Google
Sergey
23.10.2017
21:20:30
<?php function test(iterable $a) { return array_map('intval', array_merge(...$a)); } function gen(): iterable { yield [1,2]; yield [3,4]; } var_dump(test(gen()));

Борис
23.10.2017
21:20:49
хм.. какая версия пыхи?

Sergey
23.10.2017
21:20:59
7.1

Алексей
23.10.2017
21:31:20
Ой, что-то я некропостнул, однако.

Алексей
23.10.2017
21:58:16
Ну, там, вероятно, как и в Sonata, можно отцепить Datagrid и с его помощью сделать. Правда, тогда проще взять только Datagrid и не брать всё остальное - то есть, речи об EasyAdmin уже не будет идти.

Dmitry
23.10.2017
22:01:15
ну короч несколько массивов это круто но суппорт iterable было бы полезнее
у них в вики типа есть эта задача в беклоге, но не Iterable, а ArrayObject... правда хз насколько рабочий беклог у них

Алексей
23.10.2017
22:03:53
@Enleur, в описании чата: Официальный slack: https://symfony.com/slack-invite По ссылке: This invite link is no longer active.

Кстати, отправил в github.com/mr-mig/ru-tech-chats пуллреквест на добавление этого чатика: https://github.com/mr-mig/ru-tech-chats/pull/125 Странно, что его там до сих пор нет.

Алексей
23.10.2017
22:19:48
может не надо?)
Нет, ну если хотите, конечно, могу отозвать PR. Я, в принципе, понимаю, что в притоке населения свои минусы, но чатик достаточно интересный.

Sergey
23.10.2017
22:19:51
> Достаточно крупный фактурный

Google
Алексей
23.10.2017
22:22:06
> Достаточно крупный фактурный
Могу ведь и так написать :)

Bohdan
23.10.2017
23:09:57
именно что фактурный здесь народ весьма адекватный + мало новичков ну и симфони поощряет делать грамотно

Владимир
24.10.2017
04:17:22
Интерфейс драйвера? Это который из DBAL? И почему это он не должен быть завязан на БД?
Так другого интерфейса нет. Забыл упомянуть. Имел в виду именно это. Все дальше уже строится на этом интерфейсе без вариантов. Но я доктрину то понимаю - добавлять дополнительные слои абстракции для таких редких случаев как работа не с СУБД - сомнительно при ограниченных разработческих ресурсах

Более того сам поразмыслив понял, что весь клиентский по отношению к доктрине код использует в том числе и QueryBuilder, что мгновенно исключает всякие гибкие кастомные адоптации под свой стандарт хранения в файлах. Иначе им пришлось бы реализовывать свой стандарт, но это лишает смысла всю затею.

Dmitriy
24.10.2017
04:23:10
сделай по ДДД

типа CustomJsonRepository

и вытаскивай в нем из файлов в методах find, findAll и т.п.

Владимир
24.10.2017
04:25:36
Да. Мысль была в эту сторону посмотреть. Но это для меня еще не исследованная технология и я смоневался. Так что спасибо! Ты мне добавил уверенности

Все таки есть сомнение... Если я буду делать сущности с ассоциациями, то будут проблемы. Ведь доктрина будет стараться задействовать EM в обход репозиториев. Возможно, даже, если сущность уже прогружено в ассоциированое свойство

Надо исследовать, попрактиковать

Dmitriy
24.10.2017
04:30:28
там у тебя не будет em... будет типа $product = $productRepository->find($id);

можно еще интерфейс завести

вернее будет $productJsonRepository

а в нем ты открываешь файлы, парсишь жсон и т.д. все это веселье )

нафига оно тебе не понятно )

Владимир
24.10.2017
04:32:25
Нет ты не понял. Я про ассоциации говорю: $productJsonRepository->find($id)->getSubProduct();

Я не планирую ассоциации одних сущностей с другими делать, но если вдруг придется, то это может оказаться серьезным барьером

Dmitriy
24.10.2017
04:33:39
ну ты можешь на них забить.. $category = $categoryJsonRepository->find($product->getCategoryId())

))

Владимир
24.10.2017
04:34:24
да. Согласен. Интересно, как глубоко меня заведет эта кроличья нора под именем "забей" ))

Google
Владимир
24.10.2017
04:35:01
Но DDD же. Так что все нормально

?

Dmitriy
24.10.2017
04:53:55
ну если тебе сильно надо то ты можешь и релейшены запилить

Владимир
24.10.2017
05:58:33
ну если тебе сильно надо то ты можешь и релейшены запилить
Может быть. Я, просто, не знаю каким геммороем это может обернуться. Сейчас я переключился на другой проект. Вернусь к этому через два дня

Daniel
24.10.2017
06:21:21
Ребзи

Репозиторий имеет право возвращать скаляр?

Типа кол-во "таких-то" записей?

И т.п.

Dmitriy
24.10.2017
06:29:30
я так понимаю репы должны только энтити возвращать

Sergey
24.10.2017
06:30:33
Alexandr
24.10.2017
06:31:59
А куда тогда положить такие агрегатные запросы? ... Тоже интересно)

Sergey
24.10.2017
06:34:15
делаешь новый Finder интерфейс и туда пихаешь все это дело

но в реалиях симфони я честно даже не знаю чтобы кто-то так делал

обычно все что только можно пихают в репосы

у нас в коде репос это DAO с другой вывеской...

Alexandr
24.10.2017
06:36:24
Ну вот у нас тоже, угу

Sergey
24.10.2017
06:36:33
еще можно с readmodel и cqrs упороться, но это уже немного другое

Dmitriy
24.10.2017
06:37:42
а если создать класс например GetCountActiveUsers туда передать em интерфейс или конекшн и в нем один метод execute в кором dql и возвращает int?

Google
Dmitriy
24.10.2017
06:38:03
users это я от балды

Sergey
24.10.2017
06:38:45
это еще окрамиус на докладе предлагал

Dmitriy
24.10.2017
06:39:27
а в наш класс юзкейса мы уже передаем этот GetCountActiveUsers

я смотрел какой-то его доклад.. видимо им и навеяло

Alexandr
24.10.2017
06:48:58
А кто как смотрит на то, что доменные сущности имеют прямую зависимость на доктрину? Как минимум, коллекции, которые приходится в конструкторе инстанциировать

Roman
24.10.2017
06:53:01
А кто как смотрит на то, что доменные сущности имеют прямую зависимость на доктрину? Как минимум, коллекции, которые приходится в конструкторе инстанциировать
Я свои коллекции делал для связей. Удобно для добавления объектов только определенного типа (с помощью тайпхинта). Делал интерфейс UsersCollection, например. Потом создавал класс ArrayUsersCollection, делал extend от ArrayCollection, реализовывал свой интерфейс. Таким образом, ты не даешь внешнему коду использовать функции ArrayCollection от доктрины, а только свои, которые определенны в интерфейсе. Ну как-то так.

А кто как смотрит на то, что доменные сущности имеют прямую зависимость на доктрину? Как минимум, коллекции, которые приходится в конструкторе инстанциировать
А вот внутри коллекций уже юзаешь удобные функции, которые предлагают коллекции доктрины. Ну лично я смотрю на зависимость конкретно от коллекций доктриновских нормально, они у меня даже отдельным депенденси в композере идут, так как удобны в использовании.

Владимир
24.10.2017
07:30:38
обычно все что только можно пихают в репосы
Это хорошо еще если в репозитории ). "Умные" люди, с которыми я сталкиваюсь, в контроллерах всю модель реализуют. Я сюда к вам попал и душа радуется - видеть как эстеты перебирают тру реализации

Admin
ERROR: S client not available

Sergey
24.10.2017
07:33:55
если запросы строятся и делаются не в репосах, то это можно попрощаться с юнит тестами

Владимир
24.10.2017
07:37:03
если запросы строятся и делаются не в репосах, то это можно попрощаться с юнит тестами
Ха! Я на это слышал, что модульные тесты круче. Мол зачем мокать объект тестирования )). Еще один ответ на это: "Мы используем BDD и не паримся"

Sergey
24.10.2017
07:37:50
модульные это ж и есть юнит тесты, или что подразумевается под модульными? функциональные? интеграционные?

Владимир
24.10.2017
07:38:25
Интеграционные, опечатался

Sergey
24.10.2017
07:39:14
и в итоге не проекте нет ни интеграционных, ни юнит тестов

Sergey
24.10.2017
07:39:26
если запросы строятся и делаются не в репосах, то это можно попрощаться с юнит тестами
слишком категорично: - спецификации - с юнит тестами все хорошо - вынесение выборок в отдельные объекты, что бы упростить интерфейс репозитория, очень удобно в случае большого количества выборок И вот у нас уэе все хорошо с юнит тестами.

Sergey
24.10.2017
07:40:55
Google
Sergey
24.10.2017
07:40:58
а если создать класс например GetCountActiveUsers туда передать em интерфейс или конекшн и в нем один метод execute в кором dql и возвращает int?

только не execute, а __invoke

Roman
24.10.2017
07:41:58
выше примерчик был
аа, увидел) Уже немного использую выборку в отдельных классах, удобно)

Sergey
24.10.2017
07:42:04
а если создать класс например GetCountActiveUsers туда передать em интерфейс или конекшн и в нем один метод execute в кором dql и возвращает int?
можно query builder передавать, или обертку которая только создает запрос. EM передавать опасно

слиииишком жирный интерфейс, слишком высокая связанность

Sergey
24.10.2017
07:42:36
с жирным интерфейсом пока ничего не слелаешь, там всегда будут persist/remove/flush методы

Roman
24.10.2017
07:43:56
только не execute, а __invoke
Вы класс-выборку инжектите в какой-либо сервис, верно? и потом вызываете его внутри сервиса?

Sergey
24.10.2017
07:44:41
Вы класс-выборку инжектите в какой-либо сервис, верно? и потом вызываете его внутри сервиса?
у нас жирные репосы на все случаи жизни с скрытыми выборками) но а вообще да, инжектится через контейнер такой класс-выборка

Sergey
24.10.2017
07:53:05
можно QueryFunction назвать в принципе

Urmat
24.10.2017
07:55:00
Слушайте, а что плохого делать скалярные запросы в репозитерии? Хотелось бы узнать для себя

Sergey
24.10.2017
08:02:00
getTotalUsers()

или еще хуже getTagsUsageCount()

Roman
24.10.2017
08:04:10
Слушайте, а что плохого делать скалярные запросы в репозитерии? Хотелось бы узнать для себя
Я так понимаю, это неплохо, если таких запросов мало. Но если репос твой начинает расти, может быть трабл с одними гэтЭто, гэтТо, гэтЕщеЧто

Andrew
24.10.2017
08:04:45
Слушайте, а что плохого делать скалярные запросы в репозитерии? Хотелось бы узнать для себя
Фаулер пишет, что репозиторий выступает как in-memory реализация обьектов. Поэтому скалярных запросов там не должно быть в принципе, каждый метод должен возвращать обьект. А запросы ты там делаешь или стучишься по сети или сохраняешь все в память, это детали реализации

https://martinfowler.com/eaaCatalog/repository.html

Sergey
24.10.2017
08:04:53
если гэтЭто всегда возвращает сущность этого репоса, то эт окей

Urmat
24.10.2017
08:05:02
ну если делать метода типа function getUserCommentCount(User $user);

Roman
24.10.2017
08:05:31
Аааа, затупил блин, сори

Страница 350 из 1418