
Sparrow
13.01.2018
19:40:26
Порог вхождения

Maksim
13.01.2018
19:40:30
хз на счёт лёгкости, но от богомерзких табуляций у меня пригорает :(
так-то да, сложного ничего нету
я ещё и операторы типа else с новой строки пишу... страшный грех :( хуже чревоугодия

Google

Pavel
13.01.2018
19:44:42
Гламур в разработке как он есть.

Maksim
13.01.2018
19:45:18
зачем?
Критику я ждал, примерно, такого плана:
а зачем у тебя в EventSourcingService сначала идёт поиск event stream, а только затем (если не найдено) создание нового агрегата. Вот это - критика.
А скобки не на той линии - ну такое себе, честно.

dypa
13.01.2018
19:47:39
научись управлять своими ожиданиями, пример который ты привел - это не один час погружения в контекст

Maksim
13.01.2018
19:48:02
да ладно) меня парень за 10 минут вчера на этом впалил)
позавчера, прости
и он был чертовски прав: это тупая идея. Почти всегда event store будет nosql.
если взять ту же кассандру, то там запись на порядок быстрее чтения) и лучше отбивать с помощью уникального ключа

dypa
13.01.2018
19:50:38
возможно для парня это тема достаточно близка.

Maksim
13.01.2018
19:52:49
ну да, он тоже любитель обмазаться сервис-басами
эта хренотень вся не очень близка к пхпшникам. Её надо развернуть и попробовать покидаться командами. Там докер не зря на скотч прилеплен

Adel
13.01.2018
19:58:33
ну смотря каким. вон фесор вроде тоже пхпшник :)

Maksim
13.01.2018
19:59:33
таких единицы. Это аще справочник ходячий)

dypa
13.01.2018
19:59:40
https://github.com/mmasiukevich/service-bus/blob/master/src/MessageBus/MessageBusBuilder.php#L93
я ожидал что зависимость будет кофигурироваться явно через конфиг в котором по умолчанию будет NullLogger

Maksim
13.01.2018
20:00:38
да, соглашусь. Это здесь лишнее.
осталось со времён, когда саги были отдельным компонентом. Спасибо

Google

dypa
13.01.2018
20:00:56
тут возможно только 2 типа? может ли появиться третий? https://github.com/mmasiukevich/service-bus/blob/master/src/MessageBus/MessageBusBuilder.php#L154

Maksim
13.01.2018
20:01:44
ещё есть тип query, который завернули на текущем этапе

Adel
13.01.2018
20:02:09

dypa
13.01.2018
20:03:05

Maksim
13.01.2018
20:03:24
не, у query поведение совсем иное
пока просто не реализовывал. Надо сильно думать, как его сделать правильно
другого значения там быть сейчас не может

dypa
13.01.2018
20:05:25
https://github.com/mmasiukevich/service-bus/blob/master/src/MessageBus/MessageBusBuilder.php#L243
apply работает с обьектом? обьекты в пхп передаются же по ссылке?

Maksim
13.01.2018
20:07:49
apply возвращает новый объект
задача - immutable объект

dypa
13.01.2018
20:12:38
меня смущает присваивание в цикле
immutable - тогда я бы ожил увидеть в коде clone и слово immutable в имени класса

Maksim
13.01.2018
20:13:59
если бы я ещё immutable в постфикс писал, Адель бы меня на кол насадил)
но идея как-то это обозначить имеет право на жизнь

Adel
13.01.2018
20:14:07
ImmutableSetterlessAndPrettyCoolTask

Maksim
13.01.2018
20:14:42
ну я думаю это веяние дейттайма. Что бы явно их разделить

Adel
13.01.2018
20:14:57
а еще этот таск написан на PHP. это тоже надо обозначить

Maksim
13.01.2018
20:15:45
не, простого коммента будет более, чем достаточно, мне кажется.
постфикс immutable не по пср)

dypa
13.01.2018
20:18:36
при каких условиях сработает это условие? https://github.com/mmasiukevich/service-bus/blob/master/src/MessageBus/MessageBusBuilder.php#L227

Maksim
13.01.2018
20:20:54
кажется, в дело пошёл phpstan.
не при каких. И $messageNamespace там никогда не будет неймспейсом. Опять-таки, наследие. Сейчас прибью. Спасибо

Google

dypa
13.01.2018
20:22:57
не, я даже git clone не делал. просто читаю сверху вниз
есть языковые конструкции которые обычно в коде не встречаются - за них глаз и зацепляется

Maksim
13.01.2018
20:24:31
свежий взгляд - всегда хорошо.
поправил там по списку из того, что скидывал

dypa
13.01.2018
20:27:19
кстати конструкторы у тебя private, а __clone приватным почему не сделан? на это есть причины?

Adel
13.01.2018
20:27:47
а какие причины делать приватным кон?
клон

Maksim
13.01.2018
20:27:57
clone немного про другое

dypa
13.01.2018
20:28:53
я не знаю логики, поэтому и спрашиваю

Maksim
13.01.2018
20:29:24
у меня не было цели запретить клонирование объектов. Оно мне никак не мешает. А вот увеличить гибкость кода за счёт именованных конструкторов - почему нет.

dypa
13.01.2018
20:29:42
про именованные конструкторы - я не спорю что они нужны, просто если один конструктор - то я предпочел бы видеть средства языка, а вот если уже 2 способа создать обьект - то имеет смысл.
наиболее похожий пример - класс с 1 методом - количество абстракций вырастает и получается что сложнее анализировать код в голове (тк количество обьектов и связей сильно растет).

Maksim
13.01.2018
20:35:04
тут тонкая грань на самом деле. Помимо всего прочего, тебе нужно ещё и обеспечить консистентность восприятия
есть дтошки, где он нафиг не нужен. Но если часть будет через new object(), а часть через именованые - это чушь.

dypa
13.01.2018
20:36:46
https://github.com/mmasiukevich/service-bus/blob/master/src/Transport/RabbitMqTransport/RabbitMqConsumer.php#L86 побить бы на методы

Maksim
13.01.2018
20:37:26
это да, боль. Но я в целом побью эту промисовую срань при первой же возможности, заменив на корутины

Adel
13.01.2018
20:37:46
promise hell то какой

Maksim
13.01.2018
20:37:55
он самый

dypa
13.01.2018
20:37:58
js на php ?

Maksim
13.01.2018
20:38:41
как со временем полегче будет, я промисы выпилю нафиг.
там самое забавное в другом: на методы-то 1 чёрт особо не разбить. Никак не разбить

Google

dypa
13.01.2018
20:42:38
https://github.com/mmasiukevich/service-bus/blob/master/src/Transport/RabbitMqTransport/RabbitMqTransport.php#L95 а если я захочу в другом месте обрабатывать сигналы?

Maksim
13.01.2018
20:43:04
в плане в другом месте?

dypa
13.01.2018
20:43:23
https://github.com/mmasiukevich/service-bus/blob/master/src/Transport/RabbitMqTransport/RabbitMqTransport.php#L157 о_О

Maksim
13.01.2018
20:43:50
и что тут удивляет? демон остановлен

dypa
13.01.2018
20:44:30
меня удивляет что этот механизм спрятан в самых "глубинах кода"
ты где то стартуешь демона, так вот рядом бы и хотелось видеть как ты его останавливаешь

Maksim
13.01.2018
20:45:31
это нормально. Никто, кроме транспортного уровня, не знает ни про твой эвент луп, ни про конкретный транспорт
всё приложение - демон
https://github.com/mmasiukevich/service-bus-demo/blob/master/testDaemon.php

dypa
13.01.2018
20:49:19
у тебя не в 1 месте используется __destruct, у меня нет уверенности что exit - будет корректно отработан в таком случае, поддержка сигналов может быть вынесена на самый верх и передана как зависимость к нижним уровням
я могу каким то образом передать свой паблишер? https://github.com/mmasiukevich/service-bus/blob/master/src/Transport/RabbitMqTransport/RabbitMqTransport.php#L291
почему хочется что то создавать в getter?

Maksim
13.01.2018
20:50:40
сюда, нет

dypa
13.01.2018
20:52:40
https://github.com/mmasiukevich/service-bus/blob/master/src/Transport/RabbitMqTransport/RabbitMqTransportConfig.php#L23 обажаю магические константы :) еще больше обажаю патчить чужие билиотеки, я надеюсь эту библиотеку не требуется патчить чтобы присоединиться к другому порту кролика?

Maksim
13.01.2018
20:53:03
во избежание ненужных мыслей представь, что у тебя в виде транспорта используется mysql
select'om ты получаешь задачи, insert'om отправляешь обратно. Здесь зависимость прямая и обоснованная контекстом

Pavel
13.01.2018
20:53:53
Использование кучи private напоминает мне yii1, где хрен что переопределишь, даже если очень нужно. Только в помойку выкинуть ?

Maksim
13.01.2018
20:54:19

Pavel
13.01.2018
20:54:25
Используйте protected вместо private в библиотеках, пнятненько

Maksim
13.01.2018
20:54:30
protected'ом можно себе ноги отстрелить
нет, в библиотеках как раз не принято protected использовать

Google

Pavel
13.01.2018
20:55:10
А можно и не отстрелить а ловко изменить функциональность и быстро решить задачу.
Ну или страдать и покрывать матами того кто понасовал приватов

Maksim
13.01.2018
20:56:12
это как раз основы этого вашего ооп.
удивлён, что даже мерзкий юи так делает, но да ладно.

dypa
13.01.2018
20:56:42

Pavel
13.01.2018
20:57:30

Maksim
13.01.2018
20:58:00
да нет) это ты не просто не понимаешь, почему private)

Pavel
13.01.2018
20:58:01
Но пока об этом не расскажет какой нибудь окрамиус на 40 минутном докладе, люди сами не дойдут
Надо тогда репозиторий сделать private, а то вдруг кто-то себе ногу отстрелит ;)

Maksim
13.01.2018
21:00:54
надо просто понимать к чему ведут protected свойства, или protected методы. Особенно во фреймворках или библиотеках. У тебя есть публичный апи, его и используй

Pavel
13.01.2018
21:03:13
protected в yii1 привел бы к тому что удалось бы запилить туда нормальный di контейнер и фреймворк зажил бы новой жизнью.
А так - тоже можно запилить, просто переписав пару десятков тысяч строк кода.

Maksim
13.01.2018
21:03:57
di контейнер как-то улучшает характеристики фреймворка, который ведь забит синглтонами?) серьёзно?)

Pavel
13.01.2018
21:04:46
Да, поверх можно построить целый новый дивный мир, не переписывая 200cloc легаси проекта

Maksim
13.01.2018
21:04:48
да и как dic поможет я лично понятия не имею.
тебе никто не мешает для клиентской части кода его использовать. Зачем он тебе вбитый ногами в фреймворк?
я не вижу связи, если честно.

Dmitry
13.01.2018
21:06:01
паш, протектед во фреймворке - это апи. со всем вытекающим BC

Maksim
13.01.2018
21:06:51
по хорошему, там аще все классы final должны быть, что бы отбить все наркоманские фантазии. Код фреймворка самодостаточен
а все влажные мечты программиста покрываются композицией

Pavel
13.01.2018
21:07:32
Ну понятно что самодостаточен, вот он никому уже и не нужен )

Maksim
13.01.2018
21:08:08
он не нужен потому, что сам фреймворк донный. Но, повторюсь, если тебе так хотелось DIC, что мешало его для своего кода прикрутить?

Pavel
13.01.2018
21:08:34