@symfony_php

Страница 294 из 1418
Dinar
19.09.2017
11:12:55
ой, это еще в 2.5-2.6 версиях где-то они туда-сюда меняли это поведение
Ну не без причины же наверно? Теперь весь проект лопатить приходится.

Sergey
19.09.2017
11:13:59
Ну не без причины же наверно? Теперь весь проект лопатить приходится.
ну вообще эту опцию добавили для совместимости

чтобы поменять местами значения и лейблы

а в 3й версии задепрекейтили ее

Google
Sergey
19.09.2017
11:14:23
и в 4й убирают вообще

почему именно так даж не скажу, за этим не следил) но если интересно можно покопать ишьюсы https://github.com/symfony/symfony/search?p=6&q=choices_as_values&type=Issues&utf8=%E2%9C%93

Dinar
19.09.2017
11:15:13
Я к тому что сделали что текст в ключах а значение в value.

Sergey
19.09.2017
11:19:02
https://github.com/symfony/symfony/issues/15606 чет с этим связанное было

Dima
19.09.2017
12:47:25
нужно ли тестировать ивент сабскрайберы?

Dima
19.09.2017
12:48:49
как избежать при этом дублирования логики сервисов с большой такой горой моков?

Sergey
19.09.2017
12:50:58
как избежать при этом дублирования логики сервисов с большой такой горой моков?
уменьшать количество зависимостей. правильно делать декомпозицию, избавляться от primitive obsession и от message obsession

больше юзать value object-ы и т.д.

и моков станет сильно меньше

Dima
19.09.2017
12:52:32
Sergey
19.09.2017
12:54:26
ну то есть в этом собственно основная идея юнит тестов - давление на дизайн кода. Тесты, как любой другой клиентский код зависящий от твоего будут быстро реагировать на запашек

и по ним легко трекать изолированно что ты делаешь какую-то дич

Google
Sergey
19.09.2017
12:55:23
http://blog.thecodewhisperer.com/permalink/beyond-mock-objects

вот еще на тему мок объектов

и как не попасть в ловушку с ними

Dima
19.09.2017
12:56:42
и как не попасть в ловушку с ними
гранд мерси, буду изучать. Тут вот еще вроде инфы в достатке https://refactoring.guru/smells/primitive-obsession

Sergey
19.09.2017
12:59:59
нужно ли тестировать ивент сабскрайберы?
мое мнение - смотря что они делают. Если они просто делигируют логику другим штукам - то нет.

такие вещи покрывают позитивные приемочные тесты

если все что делает код это делигирует выполнение другим штукам и просто описывает последовательность вызовов - юнит тесты тут не нужны. Максимум что можно сделать - это убрать остатки "логики" (то есть условия всякие или циклы) в другой объект и сделать наш тестируемый метод полностью тупым сценарием

тогда такой вот сценарий за неимением условий и логики будет удобно покрываться одним единственным позитивным тест кейсом (end-to-end, приемочные)

Daniel
19.09.2017
13:12:33
[Symfony\Component\Serializer\Exception\UnexpectedValueException] The type of the "localId" attribute for class "BookerBundle\Entity\IntegrationReference" must be one of "string" ("integer" given).

Нужен костыль

Приходит Int, нужно чтобы чтобы приходил strin

g

Dinar
19.09.2017
13:41:32
Расширить энтити? :D

Symstriker
19.09.2017
13:42:32
костыль? Геттер левый, или нормалайзер ))

А вообще что-то я в сериалайзере не встречал подобного рода траблы

если только ты там что-то свое придумал хитрое

Dinar
19.09.2017
14:56:44
Использование трейтов в сервисах, для инджекта, скажем, энтити менеджера - это хорошо или плохо?

Просто сам энтити менеджер в сервисе не говорим.

И так понятно что плохо

Я исменно про трейт спрашиваю.

Google
Dinar
19.09.2017
14:57:17
@fes0r Что ты думаешь по этому поводу?

Sergey
19.09.2017
15:05:06
их можно только в репозиториях юзать

Я исменно про трейт спрашиваю.
какой в этом смысл если добавить аргумент в конструктор проще

Mikhail
19.09.2017
15:05:39
а что если в сервисе нужен доступ к базе?

Sergey
19.09.2017
15:06:04
не стоит размазывать доктрину по всему проекту

Mikhail
19.09.2017
15:06:26
например, сервис, который распихивает данные по объектам и записывает их по тыще репозиториев

Sergey
19.09.2017
15:06:40
не припомню что бы у меня для записи нужно было более одного-двух репозиториев

Mikhail
19.09.2017
15:07:45
на самом деле мне просто не нравится инжектить репозитории

Pavel
19.09.2017
15:11:07
не припомню что бы у меня для записи нужно было более одного-двух репозиториев
А если единой транзакцией должны изменения пройти, связанные с двумя репами?

Sergey
19.09.2017
15:12:31
на самом деле мне просто не нравится инжектить репозитории
когда ты обоснуешь это тогда продолжим разговор)

Anton
19.09.2017
15:12:43
репозиторий должен возвращать только сущности? как быть в случае если нужна выборка кторая не маппится на сущность, например аггрегация для дашборда? работать с энитити менеджером напрямую?

Sergey
19.09.2017
15:12:46
А если единой транзакцией должны изменения пройти, связанные с двумя репами?
flush то у тебя один будет, какая разница. Или ты флашиш в репозиториях?

Dinar
19.09.2017
15:12:59
Mikhail
19.09.2017
15:13:29
когда ты обоснуешь это тогда продолжим разговор)
мне не нравится что репозитории доктрины объявляются как сервисы только что бы их заинжектить

Google
Sergey
19.09.2017
15:13:35
а еще доменные ивенты начать эксплуатировать

мне не нравится что репозитории доктрины объявляются как сервисы только что бы их заинжектить
пример репозиториев которые я юзаю: class ProductRepository implements Catalog { public function __construct(EntityManagerInterface $em) { $this->em = $em; $this->repo = $em->getRepository(Product::class); } }

Pavel
19.09.2017
15:14:44
flush то у тебя один будет, какая разница. Или ты флашиш в репозиториях?
Один. Я к тому, что em будет в сервис вытянут всё равно.

Sergey
19.09.2017
15:14:54
и все подтягивается автовайрингом, и интерфейсы чистые и вообще ништяк

Один. Я к тому, что em будет в сервис вытянут всё равно.
flush не в сервисах, он обычно в контроллерах или ближе к точке входа.

короч там где ты знаешь что "вот у меня закончилась бизнес транзакция и других перед этим точно не начиналось"

Pavel
19.09.2017
15:16:08
не стоит размазывать доктрину по всему проекту
У меня просто глаз за это замечание зацепился.

Sergey
19.09.2017
15:16:29
у меня доктрина изолирована за удобными интерфейсами МОИХ репозиториев.

единственное место помимо репозиториев которые знают о доктрине - контроллеры, потому что это всеравно инфраструктура

ну и где-то ж флашить надо

(ну и есть конечно парочка сервисов которые то напрямую с dbal работают, гейтвеи такие вот, есть отдельно для репортов штуки которым тоже em нужен, но это потому что мне было лень и там тип норм)

надо просто понимать какие зависимости и как надо изолировать и все)

Pavel
19.09.2017
15:19:14
Да мне было просто интересно подробнее, что ты имел в виду, а то с первого взгляда слишком категорично выглядело) Так-то всецело разделяю такой подход.

Mikhail
19.09.2017
15:19:40
у меня контроллеры взаимодействуют только с http, вся логика в сервисах, которые я иногда вызываю из команд

Artemiy
19.09.2017
15:21:29
@fes0r а как ты относишься к такому подоходу - передавать @service_container в конструктор сервиса

Pavel
19.09.2017
15:22:07
Не понятно же от такого подхода какие реально зависимости класс имеет.

Artemiy
19.09.2017
15:22:46
Есть сервис, в котором нужны другие 5

Pavel
19.09.2017
15:23:06
Их и надо инжектить

Artemiy
19.09.2017
15:23:24
+ стандартных пара

Google
Anton
19.09.2017
15:23:49
Получится анти-паттерн сервис-локатор если передавать контейнер)

Artemiy
19.09.2017
15:23:57
пугает такой конструктор

Понял, спасибо. А по поводу em, может я пропустил, но что делать если нужна транзакция в сервисе

Pavel
19.09.2017
15:27:05
пугает такой конструктор
Возможно сервис занимается слишком многим, чем ему стоило бы.

Artemiy
19.09.2017
15:29:25
вызывается репо на создание записи в базе, затем вызываем другой сервис в котором используется скажем id вставленной записи. затем commit

Dinar
19.09.2017
15:33:31
что значит "перегружать"?) проблема с наследованием?)
Да нет. :)). Просто кто-то такой трейт уже создал. И типа использовать его.

Artemiy
19.09.2017
16:00:49
@mindtrick скажешь что-нибудь? )

Есть вариант передавать connection для использования миграции (это избавит от em), но хз насколько так правильно

Pavel
19.09.2017
16:19:13
Так если работа с сущностями осуществляется есть смысл именно em и инжектить для флаша.

Artemiy
19.09.2017
16:20:46
em что-то уже не хочется использовать, как и сервис контейнер

Sergey
19.09.2017
16:21:00
а альтернатив пока нет)

хотя, можно EntityManagerInterface юзать

Artemiy
19.09.2017
16:21:45
Doctrine\DBAL\Driver\Connection

Sergey
19.09.2017
16:21:48
тогда желания getRepository сделать не будет

а. пардон. в родительском интерфейсе есть

Artemiy
19.09.2017
16:22:27
ага (

Doctrine\DBAL\Driver\Connection не пойдет?

Sergey
19.09.2017
16:22:45
EntityManagerInterface отличный пример нарушения ISP

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