
$iD
01.12.2017
13:42:32
завтра

Sergey
01.12.2017
13:43:00
а что у вас там на митапах интересненького?

$iD
01.12.2017
13:43:33
снова Сергей будет Солить солид
:)

Google

Sergey
01.12.2017
13:44:07
эх, а у нас все за микросервисы топят

$iD
01.12.2017
13:44:46
угу, на fwdays топили за микросервисы
ну и cqrs/es

Sergey
01.12.2017
13:45:43
мне митапчики больше нравятся чем fwdays чет
можно понабрасывать и потроллить
а на fwdays даже нельзя сразу вопросы задавать докладчикам, гавно

Alex
01.12.2017
13:46:33
Всем привет. А что посоветуете по cqrs почитать интересного?

Pavel
01.12.2017
13:47:56

Sergey
01.12.2017
13:48:24
Эванс и Вернон

$iD
01.12.2017
13:48:53

Sergey
01.12.2017
13:50:41
о, кассандра

$iD
01.12.2017
13:52:26

Google

Sergey
01.12.2017
13:52:49
у меня билеты в польшу уже)

Sasha
01.12.2017
14:05:05

Bohdan
01.12.2017
14:13:47
ча?
имел ввиду сохраниться перед созданием бранчи, если все плохо - загрузить прошлую версию

Sergey
01.12.2017
14:14:26
начни с этого
что бы потом когда будешь читать как люди делают cqrs с моделью экторов и ивент серсингом фильтровать инфу

Artemiy
01.12.2017
14:15:06

Alex
01.12.2017
14:21:29
@fes0r Спасабо за ссылку. Небольшой вопрос про евент сорсинг (может сам подскажешь или знаешь где прочитать) я понимаю идею, что мы храним базовую сущность и ее изменения. И в процессе работы с этой сущностью воспроизводим все евернты и так сказать, накладываем на нее. Это все ясно, но как быть если, предположим есть товар (базовая сущность) и набор событий, например изменение цен, пускай их 200 и надо выбрать все товары с ценой 100$. Как поступают в таком случае?

Sergey
01.12.2017
14:21:57
есть проекции на этот случай для выборок

Alex
01.12.2017
14:22:40
другими словами я просто храню каким либо образом обьект, на котором воспроизвел весь список евентов ?

Sergey
01.12.2017
14:24:05
в проекции у тебя будут окончательные варианты твоих товаров с их актуальными ценниками, которые ты используешь для своих выборок, аналитик и тд

Alex
01.12.2017
14:26:18
не будет ли у меня в таком решении вариантов, что мои проекции немного отстают от действительности, например евентов очень много за единицу времени? или это уже как напишешь эти проекции?


Sergey
01.12.2017
14:26:41
но тут смотри
1. есть проекции на чтение - то что они на пару сотен милисекунд отстают от реальности - это не критично, у тебя и так и так то что видет пользователь уже идет с запазданием (пока дошло, пока дорендрилось, + 300 милисекунд минимум на то что бы человек понял что видит)
2. ивенты генерятся через write модель, это тоже по сути проекция, она сначала пробует поменять свой стэйт, и если удалось - то запоминает событие. В коде это выглядит как-то так:
public function doSomething($someData)
{
// protect pre-conditions
if (!$someData) {
return; // или мы можем запомнить событие что что-то не удалось, полезно для аналитики и суппорта
}
$event = SomethingHasBeenChanged::occur($someData);
$this->replayAndRemember($event);
}
в replayAndRemember оно попробуем воспроизвести ивент на стэйт, там же можно делать проверку инвариантов что у тебя стэйт все еще валидный. И если все хорошо - ивент сохраняется.
то есть в целом тут уже можно добиться того что состояние write модели всегда актуально


vlad
01.12.2017
14:31:35
ребят, всем привет

Sergey
01.12.2017
14:31:36
дальше можно просто стараться уменьшить задержки на формирование проекций

Google

Sergey
01.12.2017
14:31:57
event sourcing это простая идея, но как и любая хрень с ивентами имеет кучу подводных камней
например если ты любишь исключениями бросаться - иногда это может тебя подвести.

vlad
01.12.2017
14:32:34
The table with name 'tablename.fos_user' already exists.
кто-нибудь сталкивался с такой ошибкой?
говорят, проверить все связи OneToMany
но не понимаю, куда копать..

Sergey
01.12.2017
14:32:51
но профит тоже крутой - иметь возможность делать ту модель данных, которая тебе удобна под запись и чтение, причем разные модели данных для разных операций. Ну и если бизнес еще только формируется - это ценный кладесь информации о том как пользователи реально используют твой продукт

Sergey
01.12.2017
14:33:25
ага, только легаси кода придется держать тонну чтобы поддерживать обработчики с самого начала ивентов

Sergey
01.12.2017
14:33:44

Alex
01.12.2017
14:33:53
@fes0r Спасибо за развернутый ответ, стало понятнее

Sergey
01.12.2017
14:34:37

vlad
01.12.2017
14:34:52
update пытаюсь сделать
при этом mysql говорит, что у базы, к которой я обращаюсь, нет таблиц

Sergey
01.12.2017
14:38:40
1. проверь к какой базе подключаешься
2. проверь что у тебя реально нет таблиц
3. можешь сделать dry-run и глянуть сгенеренный sql

vlad
01.12.2017
14:41:40
пытаюсь вывести таблицы в той же базе, к которой идёт коннект

vlad
01.12.2017
14:41:41
ответ:

Dmitry
01.12.2017
14:43:04
Всем привет. Перевел проект на 3.4 все гуд, но остался один deprecation User Deprecated: The "knp_paginator" service is private, getting it from the container is deprecated since Symfony 3.2 and will fail in 4.0. Вызываю как $this->get('knp_paginator')->paginate(); Не совсем понимаю как исправить, если Paginator::class писать то выводит что не объявлен, дублировать в сервис что-ли autowire для него или в самом плагине public: true должны добавить.

Sergey
01.12.2017
14:43:35
Paginator: '@kpn_paginator'
и инджекти
ну мол элиас на тип
именно инджекти а не забирай через ->get()

Google

Sergey
01.12.2017
14:44:52
в контроллеры можно инджектить в аргументы экшена если что

Dmitry
01.12.2017
14:44:58
Ага, понял. Спасибо, сейчас попробую

vlad
01.12.2017
14:47:48
ребят, а атрибут mappedBy - должен быть уникальным?
если у меня, например, в одной сущности 3 связи oneToMany

Sergey
01.12.2017
14:48:29
тем более если ты определяешь one-to-* связь

vlad
01.12.2017
14:50:23
извини, что с вопросами лезу, но может быть поможешь
я читал документацию, но не особо понял смысл этого атрибута
понял, что он и для налаживания связи, двусторонней, между сущностями
но я вот указал для 3-х полей в аннотации одно и тоже значение, в атрибуте mappedBy
ну и как следствие, видимо, это неверно
иначе говоря, так делать нельзя, да?

Admin
ERROR: S client not available

Sergey
01.12.2017
14:54:05

vlad
01.12.2017
14:57:46
спасибо

Pavel
01.12.2017
17:47:34
а зачем код затирать или там названия перменных рутовые пароли?:)

Vladislav
01.12.2017
17:50:04
там название типа IIITOIIOP
или JIACTHENM

Sergey
01.12.2017
18:03:57
чет как-то cache pools в симфони замудрили
хрен настроишь чтобы через доктриновый адаптер работал serializer/validator

vlad
01.12.2017
18:31:31
друзья, такой вопрос
в некоторых проектах, отчего-то, phpStorm не сразу цепляет плагин симфони

Google

vlad
01.12.2017
18:31:48
т.е. получается такая ситуация, например
и так с большинством методов и прочего
отчего это может быть?
всё настраивается всегда одинаково, а вот цеплять не хочет

Dmitry
01.12.2017
18:32:30
он вроде кеш юзает, может не запускал еще приложение, кеша нет

vlad
01.12.2017
18:33:36
не запускал?
а как это сделать?)
немного не понимаю терминологии
у меня обычный symfony-проект
сейчас вот команду переписываю со старой версии, и без элементарных выпадаешь жить не просто
а очень бы их хотелось увидеть

Dmitry
01.12.2017
18:36:52
cache:warmup попробуй из консоли выполнить, и посмотри

Sasha
01.12.2017
18:39:00
Может vendor в игноре?
Можно попробовать обнулить индекс пусть переиндексирует

vlad
01.12.2017
18:43:11
не, это сработало бы, иначе
cache:warmup попробуй из консоли выполнить, и посмотри
слушай, с индексом помогло
спасибо большое

Kirill
01.12.2017
18:47:20

vlad
02.12.2017
07:05:32
добрый день всем
ребята, такой вопрос
как-то обошёл его стороной
метод
flush
у
EntityManager'a
можно вызывать один раз, в конце всех манипуляций с сущностями?
или после каждой манипуляции с конкретной сущностью?

Евгений
02.12.2017
07:13:52
Один раз

Александр
02.12.2017
07:54:12
ребят, подскажите, как расшивочная таблица на англ называется плиз

Bohdan
02.12.2017
07:57:15
что ты под ней подразумеваешь?

Александр
02.12.2017
07:59:34
то что создается чтоб связать две manyToMany таблицы и хранит пары ключей от обеих

Bohdan
02.12.2017
07:59:50
pivot table