@symfony_php

Страница 771 из 1418
Sergey
23.03.2018
09:27:53
Как вариант это сделать асинхронно, но хочется понять нету ли точно другого пути

Andrey
23.03.2018
09:30:38
Как вариант это сделать асинхронно, но хочется понять нету ли точно другого пути
в бекграунд кидай лучше. И пусть там изменения производятся

Борис
23.03.2018
09:31:23
Окей > Каким образом можно стартануть новую транзакцию после флаша? Новый $uow->flush() должен заново сохранить все измененные сущности. Если я правильно понял вопрос

Google
Sergey
23.03.2018
09:56:21
важный момент - не допусти рекурсию в этом месте. У меня это выход если небыло ни одного ивента.

в идеале конечно каждый твой листенер должен свой UoW иметь

но пока это проблематично сделать

Sergey
23.03.2018
10:00:21
postFlush() { events = uow.releaseEvents() If(events.empty()) return dispatchEvents(events) flush() }
у нас примерно так сейчас и сделано, вам не попадались проблемы с UoW что некоторые коллекции в сущности терялись после первого флаша?

Sergey
23.03.2018
10:00:53
потому повторюсь - в идеале у тебя должны быть отдельные UoW

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

а вообще - если у тебя все это не закрыто одной большой транзакцией сверху, то есть смысл мувнуть все листенеры в отдельный процесс (через rabbitmq/zeromq pub/sub)

Serge
23.03.2018
11:46:27
всем привет. подскажите пжлст, меня или глючит и такая фича была, или я что-то выдумал. допустим у нас есть query builder или обычный findBy в репозитории и какая-то сущность, у которой объект имеет свойство $date с mapping type = "date"(не datetime). Если я делаю findBy(['date' => new DateTime()]), то мой объект DateTime должно преобразовать в строку с датой в формате Y-m-d которая потом попадёт в sql запрос?

или же findBy(['date' => (new DateTime())->format('Y-m-d')]) надо делать?

Google
Vladislav
23.03.2018
11:48:30
но ты попробуй оба варианта и посмотри разницу

Serge
23.03.2018
11:48:49
я посмотрел логи. дата не преобразовывается

вместе со временем отправляется в мускуль

Serge
23.03.2018
12:40:33
вся магия (конвертация) происходит в doctrine type, посмотри исходники типа date
всё таки в логах писало не те данные. указывались входящие, а не реальные для отправки в бд. DateType норм конвертит дату, спс

Michael
23.03.2018
14:22:58
чот приехал на другой проект и там Карбон повсеместно ипользуют и я вот чо не очень прочувствовал этот момент да не много синтаксического сахара но тащить зависимость Или кто знает киллер фичу карбона?

Bohdan
23.03.2018
14:31:59
юзал карбон, переехал на chronos

то же самое, но иммутабельное

киллер фича - сравнение, да

Timur
23.03.2018
15:30:18
/link@yetanotherstatsbot

Yet Another Stats
23.03.2018
15:30:19
https://b.yasb.exileed.com/telegram/chat/1001091570538

Sergey
23.03.2018
16:42:35
https://dev.to/scottshipp/avoid-getters-and-setters-whenever-possible-c8m

Serge
23.03.2018
17:37:53
может кто знает, почему singleScalarResult в тестах может возвращать старое значение?

не актуальное в бд

Alan
23.03.2018
19:29:22
https://dev.to/scottshipp/avoid-getters-and-setters-whenever-possible-c8m
понравилось что предлагает варианты на пробу прежде чем взять геттер сеттер )

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

Timur
23.03.2018
19:34:58
А как же языки с нестрогой типизацией? В PHP типа входящего параметра можно ограничить только сеттером: public function setDate(DateTime $date) : void { $this->date = $date; }

Timur
23.03.2018
19:35:50
это не проблема
Выкладывай

Google
f4rt~
23.03.2018
19:36:28
я про "ограничить"

Alan
23.03.2018
19:36:35
почему только сеттером? а в конструкторе?)

f4rt~
23.03.2018
19:36:50
мне ничего не помешает, по хорошему вместо DateTime туда засунуть что я захочу

Timur
23.03.2018
19:37:27
Alan
23.03.2018
19:37:56
тайп хинты же везде куда можно засунуть ))

кроме паблик свойств

Timur
23.03.2018
19:39:42
почему только сеттером? а в конструкторе?)
А если я не задаю параметры через конструктор? Положим у меня сущость и 100 аттрибутов в ней, не буду же я 100 аргументов в конструктор пихать, надо помнить очередность, какие-то аргументы надо пропускать и т.д.

Alan
23.03.2018
19:40:18
можно бить на value object и группировать их

а почему 100 а не 1000 ?)

Alan
23.03.2018
19:42:15
а с сеттерами ты не забудешь их все заполнить?) их же 100 штук это 100 методов вызвать

Timur
23.03.2018
19:42:18
Решил ты значит такой сделать: $article = new Article; // Тут ты еще не знаешь, как статья называется, или еще чего-то не знаешь // Делаешь кое-какие вычисления и... $article->setDate('2007-01-01') Тут PHP не даст тебе так сделать

Timur
23.03.2018
19:43:16
а с сеттерами ты не забудешь их все заполнить?) их же 100 штук это 100 методов вызвать
Порядок сеттеров не надо запоминать, у сеттеров есть логичные имена, и не всегда надо сущности задавать все аттрибуты при создании её

Andrey
23.03.2018
19:43:29
Пятничный срачик. Наканецта

Alan
23.03.2018
19:43:34
это самая большая боль в разработке обычно на проектах?)

порядок аргументов?)

Sergey
23.03.2018
19:43:42
Порядок сеттеров не надо запоминать, у сеттеров есть логичные имена, и не всегда надо сущности задавать все аттрибуты при создании её
если не всегда надо задавать все атрибуты сущности - возможно тебе стоит разделить сущность)

Andrey
23.03.2018
19:43:51
Жги

Google
Sergey
23.03.2018
19:44:06
это самая большая боль в разработке обычно на проектах?)
обычно тупые аналитики и "ребят нам завтра в прод это надо"

Bohdan
23.03.2018
19:44:48
Жги
let the pukans burn

Admin
ERROR: S client not available

Sergey
23.03.2018
19:44:56
первые нифига не помогают разобраться что делать и редко отвечают на вопрос "нафига эта фича нужна и какую проблему решает", вторые обычно являются результатом херового планирования.

а сеттеры на этом фоне - это легкое покалывание...

90% если есть сеттеры то нет тестов) (хотя тут я манипулирую - просто 90% что тестов нет)))

Alan
23.03.2018
19:46:05
ахахах

Sergey
23.03.2018
19:46:32
юнит тестов точно не будет (честных изолированных) - и тут уже как раз таки потому что сеттеры и геттеры (хотя тоже скорее всего есть 10% из категории другое)

хорошо если будут интеграционные или e2e

Andrey
23.03.2018
19:50:29
@fes0r, я готов вернутся к давнему вопросу. Как с имутабельной сущностью не юзая persist заапдейтить сущность?

Sergey
23.03.2018
19:52:13
@fes0r, я готов вернутся к давнему вопросу. Как с имутабельной сущностью не юзая persist заапдейтить сущность?
давай по другому.... вот у тебя есть имутабельная сущность, так? и ты делаешь другую - новую сущность. С уже новым стэйтом. Ведь так имутабельность работает. Эти сущности имеют одинаковый идентификатор, то есть в один момент времени мы имеем 1 сущность с двумя разными стэйтами. И это уже не порядок, не находишь?

если ты хочешь заменять стэйт - юзай VO

там такая ситуация вполне корректна

дальше идет смешание понятий "сущность доктрины" и "сущность" как элемент декомпозиции систем.

Sergey
23.03.2018
19:53:31
ограничения твоей ORM которые просто не позволят делать красивую и чистую модель (ибо наследуют ограничения реляционной модели - одно только ограничение на отсутствие односторонней one-to-many ассоциации чего только стоит)

Ну давай с новой даже версией.
с новой версией вопросы те же

что тебе мешает сделать сущность с двумя полями - id и state?

Google
Andrey
23.03.2018
19:54:50
Лады. С версией я неудачно, наверн

Sergey
23.03.2018
19:54:54
и спокойно подменять стэйт

потом может быть еще рядом появятся поля "когда поменялся стэйт"

или, быть может - история изменения стэйта

как твои имутабельные сущности ложатся на identity map? новая должна "подменить" старую? и там где юзалась старая версия по ссылке волшебным образом должно все обновиться на новый инстанс?

Andrey
23.03.2018
19:56:41
Через 10 мин смогу нормально засесть. Попишу)

Sergey
23.03.2018
19:56:55
Timur
23.03.2018
19:57:47
Логичные имена. Давай об этом поговорим?
Что понятнее? 1) $user = new User( 'alfred', 'hitchcock', '13-08-1899', '29-04-1980', '178', false, true, false, User::TYPE_AUTHOR, Land::USA ) 2) $user = new User; $user->setFirstname('Alfred') ->setLastname('Hitchcock') ->setBirthdate('13-08-1899') ->setDieddate('29-04-1980') ->setHeight('178') ->setIsModerated(true) ->setIsAlive(false) ->setType(User::TYPE_AUTHOR) ->setLand(Land::USA) ;

Sergey
23.03.2018
19:57:49
пока идешь - просто подумай в отрыве от "поменять сущность" - в простой ситуации когда эта сущность одна и никто ее не юзает - все будет хорошо и можно сделать так как ты предлагаешь (это будет даже вполне норм), но обычно все не так просто.

Timur
23.03.2018
19:59:44
Плюс можно вызвать в любой части кода

Плюс можно пропускать что хочешь

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