
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
Ой, что-то я некропостнул, однако.

Andrew
23.10.2017
21:55:50

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

Dmitry
23.10.2017
22:01:15

Алексей
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
Странно, что его там до сих пор нет.

Sergey
23.10.2017
22:17:46

Алексей
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
Более того сам поразмыслив понял, что весь клиентский по отношению к доктрине код использует в том числе и 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

Sergey
24.10.2017
06:07:14

Arky
24.10.2017
06:13:16

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


Alexandr
24.10.2017
06:56:48

Владимир
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

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:14

Roman
24.10.2017
07:40:43

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
слиииишком жирный интерфейс, слишком высокая связанность

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

Roman
24.10.2017
07:43:56

Sergey
24.10.2017
07:44:41

Roman
24.10.2017
07:48:02

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

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

Roman
24.10.2017
08:01:50

Sergey
24.10.2017
08:02:00
getTotalUsers()
или еще хуже getTagsUsageCount()

Roman
24.10.2017
08:04:10

Andrew
24.10.2017
08:04:45
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
Аааа, затупил блин, сори