@symfony_php

Страница 399 из 1418
Sergey
15.11.2017
18:49:11
на вот

возьми это упражнение

придумай себе маленькую задачку (описать объектами например заказ и что с ним могут делать)

и попробуй соблюсти все эти ограничения

Google
Sergey
15.11.2017
18:50:05
они тут жесткие сильно, специально что бы ты вопросы начал нужные задавать

Антон
15.11.2017
18:50:50
Да вот последние пункты уже )

С первыми уже все понятно. И на тысячи строк кода может 1 else

От зенда был такой доклад как код делать читаемым. Все найти не могу

Sergey
15.11.2017
18:55:59
smile
15.11.2017
18:58:21
1. "уникальный email" не является бизнес ограничением на саму сущность, скорее на коллекцию сущностей 2. этот вопрос тебе надо было с бизнесом решить. Что делать с пользлователями которые не указали ранее возраст
если я правильно тебя понял - все что я могу сделать: 1) в сущности максимум что я могу сделать проверить что это впринципе чтото похожее на емейл (для простоты что это не пустая строка) 2) само ограничение что емейл должен быть уникальным среди емейлов других пользователей вынести в отдельный сервис редактирования пользователя, который: - принимает сущность пользователя и мыло - проверяет мыло на уникальность и если все ок - меняет мыло через changeMail сущности

smile
15.11.2017
19:00:41
2. репозиторий. Т.е. по факту можно попробовать просто найти чувака с таким мылом

Sergey
15.11.2017
19:01:57
2. репозиторий. Т.е. по факту можно попробовать просто найти чувака с таким мылом
я так понимаю метода add(User $user) у тебя там пока нет) потому наверное такие предложения)

smile
15.11.2017
19:07:46
да, такого метода пока нет. Но если честно не до конца улавливаю сейчас связь add при попытке изменить мыло и именно в таком формате add(User $user)

smile
15.11.2017
19:08:21
но допустим я создаю пользователя, а не изменяю

Google
smile
15.11.2017
19:08:28
и мыло у меня уникальным должно быть и оно обязательно

тогда мне захочется делать чтото по типу new User($email) и в add я уже пробрасываю этого User'a

Sergey
15.11.2017
19:08:59
но допустим я создаю пользователя, а не изменяю
я бы делал так: - для UI отдельно http запросом проверять что email не занят - повесить на базу unique ключ и забить болт

smile
15.11.2017
19:09:03
получается ты предлагаешь внутри addUser чекать его мыло на уникальность?

Vyacheslav
15.11.2017
19:13:13
@sergey_smile можешь делать валидации таким образом: 1. Делаешь интерфейс аля ValidateableDatabasedly. 2. Екстендишь ентити от этого интерфейса и делаешь метод isValid() 3. В этом методе возвращаешь массив с ошибками. 4. На preFlush ставишь листенер который слушает или тебе пришла ентитя которая инстанс оф интерфейса. 5. Там вызываешь isValid() и если не пусто - throw Exception или что там тебе нужно. 6. Потом кетчишь этот ексепшн и даёшь пользователю сообщение в гуи

Dmitriy
15.11.2017
19:21:30
в жопу префлуши ваши

smile
15.11.2017
19:22:00
@sergey_smile можешь делать валидации таким образом: 1. Делаешь интерфейс аля ValidateableDatabasedly. 2. Екстендишь ентити от этого интерфейса и делаешь метод isValid() 3. В этом методе возвращаешь массив с ошибками. 4. На preFlush ставишь листенер который слушает или тебе пришла ентитя которая инстанс оф интерфейса. 5. Там вызываешь isValid() и если не пусто - throw Exception или что там тебе нужно. 6. Потом кетчишь этот ексепшн и даёшь пользователю сообщение в гуи
тут у меня еще больше вопросов возникает. 1) Что будет внутри isValid? Проверка всей сущности на валидность? 2) Как isValid будет проверять на уникальность мыла? Ходить в репозиторий и чекать есть ли у меня чувак с таким мылом? Както слишком много будет уметь делать этот isValid 3) Если вешать isValid на preFlush и валидировать весь обьект полностью каждый раз только перед flush - на сколько в этом есть смысл, если я меняю одно свойство? и что мне делать по всему приложению, если в таком случае я допускаю что у меня может бродить там невалидный обьект?

Vyacheslav
15.11.2017
19:24:03
в жопу префлуши ваши
аргументированно )

Bohdan
15.11.2017
19:27:35
мнение Ocramius'а - агрумент?

Vyacheslav
15.11.2017
19:27:54
тут у меня еще больше вопросов возникает. 1) Что будет внутри isValid? Проверка всей сущности на валидность? 2) Как isValid будет проверять на уникальность мыла? Ходить в репозиторий и чекать есть ли у меня чувак с таким мылом? Както слишком много будет уметь делать этот isValid 3) Если вешать isValid на preFlush и валидировать весь обьект полностью каждый раз только перед flush - на сколько в этом есть смысл, если я меняю одно свойство? и что мне делать по всему приложению, если в таком случае я допускаю что у меня может бродить там невалидный обьект?
1) да 2) в репо точна не должна ходить ) тогда другой вариант. Создаёшь отдельный сервис-валидатор и там валидируешь что хочешь у своей ентити. Укажешь конкретно какой валидатор на какой ентите висит 3) да, весь объект полностью. Мыло к примеру можешь не валидировать если оно не изменилось. Не валидные объекты ты не можешь допускать никак. У тебя получается инконсистентность. Так нельзя делать. Пришл невалидный объект - пока не сделаешь валидным - нельзя сейвить в базу.

Bohdan
15.11.2017
19:28:41
аргументированно )
https://github.com/symfony/symfony-docs/issues/5315

Vyacheslav
15.11.2017
19:31:45
https://github.com/symfony/symfony-docs/issues/5315
тыкни пальцем куда именно смотреть плиз

Bohdan
15.11.2017
19:32:48
3 пункт списка

smile
15.11.2017
19:35:26
1) да 2) в репо точна не должна ходить ) тогда другой вариант. Создаёшь отдельный сервис-валидатор и там валидируешь что хочешь у своей ентити. Укажешь конкретно какой валидатор на какой ентите висит 3) да, весь объект полностью. Мыло к примеру можешь не валидировать если оно не изменилось. Не валидные объекты ты не можешь допускать никак. У тебя получается инконсистентность. Так нельзя делать. Пришл невалидный объект - пока не сделаешь валидным - нельзя сейвить в базу.
Если я не могу допускать невалидные обьекты и делаю сервис валидатор, то выходит в идеале этот валидатор надо запускать после каждого изменения обьекта и за этим нужно следить вручную. Тогда возможно проще делать сервис редактирования пользователя, где есть changeMail, который внутри чекает мыло и если с мылом все ок - то вызывает изменение его в сущности? Как профит вижу: - не запускать валидатор - вприцнипе нет момента, когда у меня есть обьект с дублирующимся мылом Из минусов: - все также нужно полагаться, что никто не херанет изменение мыла в сущности на прямую в обход сервиса и это лежит чисто на совести разраба

Bohdan
15.11.2017
19:39:08
имхо - нарушение SRP плюс там есть ссылка на саму презентацию в начале сообщения, там чуть больше рассказано это ведь ещё и смесь слоя приложения и слоя логики

Google
Andrey
15.11.2017
19:44:04
вы не защитите код от кодера

а что если другой разраб выпилит нах ваш ивент листенер?

Артур Евгеньевич
15.11.2017
19:45:18
парни заюзал symfony DI в своем проекте, и такой вопрос тепреь как мне в шторме автодополнение в yaml сделать без symfony плагина?

Vyacheslav
15.11.2017
19:46:09
Хотя и тест сможет удалить)

Andrey
15.11.2017
19:46:27
вот именно

поэтому спасет только надавать по щщам на ревью

Vyacheslav
15.11.2017
19:47:00
Ну я бы не делал сервис отдельный, а делал универсально через листенер

Andrey
15.11.2017
19:47:24
есть проблема со всеми листнерами ивентов доктрины

в них придется выносить логику

Bohdan
15.11.2017
19:47:42
http://ocramius.github.io/doctrine-best-practices/#/58 начиная отсюда

Andrey
15.11.2017
19:47:48
иначе очень быстро наткнетесь на циклические зависимости

Bohdan
15.11.2017
19:47:49
Lifecycle Callbacks are supposed to be the ORM-specific serialize and unserialize

Andrey
15.11.2017
19:48:59
есть сервис, он юзает орм, есть листнер доктрины, он юзает сервис, в итоге чтоб инициализировалась доктрина, становится нужен этот сервис, которому нужна доктрина

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

и свои ивенты диспатчить

ес надо

Bohdan
15.11.2017
19:50:02
черт, хотел найти кусок, где он об этом в видео говорит, но он эти слайды просто скипнул

Andrey
15.11.2017
19:50:22
предусмотрительно))

Google
Bohdan
15.11.2017
20:19:19
@fes0r мой довод насчет srp относительно ивент листенеров хоть в тему?) а то мало ли, вдруг я что-то не так понимаю

Andrey
15.11.2017
20:22:00
вывод - не юзай доктриновские ивент листенеры
я об этом и говорю, зачем делать тот же самый вывод еще раз?

Andrey
15.11.2017
20:23:21
есть проблема со всеми листнерами ивентов доктрины

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

и свои ивенты диспатчить

ес надо

вобщем впечатления плохие))

Admin
ERROR: S client not available

Stas
16.11.2017
08:28:10
жуть какая
перечитайте контекст проблемы. при определении формы, как сервис, у Вас нет доступа к билдеру, емнип

Bohdan
16.11.2017
08:31:50
почему для подключаемых бандлов рекомендуют использовать xml для конфига? а для своих - yaml

Sergey
16.11.2017
08:34:47
расширяемость лучше

Google
Bohdan
16.11.2017
08:35:45
в каком конкретно юзкейсе xml будет более расширяемым, нежели yaml?

Sergey
16.11.2017
08:38:06
http://fabien.potencier.org/symfony-service-container-using-xml-or-yaml-to-describe-services.html



$iD
16.11.2017
08:39:00
слышал только Аннотации для своих

:)

Sergey
16.11.2017
08:39:35
да и вообще да, аннотации для своих проектов

Herman
16.11.2017
08:39:44
Аннотации для своих банднов это про доктрину

Sergey
16.11.2017
08:40:02
еще есть роутинги, валидации и целая тележка аннотаций

так что не только

Herman
16.11.2017
08:40:04
А человек видимо про сервисы спросил

Bohdan
16.11.2017
08:40:31
в бест практисах не нашел, но я имею ввиду конкретно конфиги сервисов

Bohdan
16.11.2017
08:40:59
роутинг - имхо дело вкуса

Herman
16.11.2017
08:41:09
Ну вот конкретно про "аннотации в своих бандлах, xml в библиотеках" говорил окрамиус про доктрину

Bohdan
16.11.2017
08:46:16
http://fabien.potencier.org/symfony-service-container-using-xml-or-yaml-to-describe-services.html
это все же трошки устаревшая инфа насчет автокомплита - симфони плагин во многих случаях вытягивает все, что нужно валидация - ну, в ide не подсвечивается, но при проверке ошибка сразу выскочит скорость работы - в любом случае влияет только на скорость сборки контейнера внешние зависимости - в принципе, действительно аргумент, но я слабо верю в то, что у кого-то в достаточно большом приложении с множеством разных бандлов какой-то из них не потянет за собой парсер yaml

Sergey
16.11.2017
08:46:48
не все юзают пхп шторм и уж тем более плагин симфони

$iD
16.11.2017
08:46:57
+

Sergey
16.11.2017
08:47:04
валидация ide и валидация xml это немного разные вещи

$iD
16.11.2017
08:47:07
были у нас Саблаймолюбители

боль

Sergey
16.11.2017
08:47:30
а xml пхп разбирает быстрее чем yaml, как минимум потому что юзает сишные биндинги для этого

можно в слаке спросить у чуваков, они скажут точно или ткнут носом где это написано

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