фуу.. тут про GraphQL разговор идет.. про нормальные фронтэнды, а ты вспомнил про jquery ui... в 2019м году!втащили какой-нибудь jquery ui весом в пару мегабайт.
фуу.. тут про GraphQL разговор идет.. про нормальные фронтэнды, а ты вспомнил про jquery ui... в 2019м году!втащили какой-нибудь jquery ui весом в пару мегабайт.
Все нормальное на CQRS похоже. Сама природа чтения и записи всегда разная. и идея Redux на фронте мне в свое время очень понравилась - ясные и четкие потоки данных, нормально контролируемые.Про Redux-подобные фронтенды завтра расскажу, много букв. Это все удивительно похоже на CQRS. Только на клиенте.
Ты, блин, не поверишь, некоторые тянут! Я, конечно, по рукам бью сразуфуу.. тут про GraphQL разговор идет.. про нормальные фронтэнды, а ты вспомнил про jquery ui... в 2019м году!
Блин, вот капитанская же вообще идея, почему надо потратить 10 лет чтобы это дошло?Сама природа чтения и записи всегда разная.
Да это в общем-то не для снижения трафика, а чтобы клиенты имели мотивацию старое говно выпиливать, чтобы потом можно было без нарушения BC удалять старые элементы API.Ага, сэкономили 50 байт на запросе, а потом втащили какой-нибудь jquery ui весом в пару мегабайт. Ну не знаю, экономия на спичках это все.
Мистер не в курсе про DI и фабрики?все еще надеюсь что вы научите меня как бы мне так хранить конфиг чтобы было лучше чем global
А почему ты связываешь саги и ЕС ? ) Разные же совсем понятияПо поводу Redux вспомнил, что есть такая штука как Redux Saga. Это не имеет ничего общего с Saga'ами из Event Sourcing'а и приходилось каждый раз гуглить «saga -redux».
Я кстати тоже думал, что сага - это EC в распределенной системе. Та же самая роль, не?А почему ты связываешь саги и ЕС ? ) Разные же совсем понятия
На самом-то деле, папка ООП Алан Кей сразу писал:Блин, вот капитанская же вообще идея, почему надо потратить 10 лет чтобы это дошло?
More recently people keep claiming that OOP “isn’t really” about classes and objects and the important bit is actually the messages. In the 1998 post, after saying how much he regrets “objects”, Kay also says that “the big idea is ‘messaging’”. He later follows up with:
«OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things. It can be done in Smalltalk and in LISP. There are possibly other systems in which this is possible, but I’m not aware of them.»
В принципе, не совсем корректно с моей стороны связывать их напрямую, но ES и саги созданы друг для друга и тут невероятная синергия.А почему ты связываешь саги и ЕС ? ) Разные же совсем понятия
Эммм. Сага — обычно такой своеобразный aggregate root (который нередко делают event sourced, btw). Только вместо `->apply(new Event())` обычно делает `->send(new Command())`.Сага может состоять из микросервисов... какие-то из них могут юзать ЕС, какие-то нет...
Это наверно Orchestration-based saga. Есть еще Хореография based но вроде они отмирают потихоньку. https://microservices.io/patterns/data/saga.htmlПо крайней мере, я говорю про такую сагу, которая слушает события и выполняет команды (хотя может и публиковать события тоже).
Ну так опять встаёт вопрос отказоусточивости.Это наверно Orchestration-based saga. Есть еще Хореография based но вроде они отмирают потихоньку. https://microservices.io/patterns/data/saga.html
Там много ерунды.Читая тебя я сразу вспомнил эту статейку - https://www.innoq.com/en/blog/domain-events-versus-event-sourcing/ Там он правда сильно уперся в инфраструктуру...
Вот у нас там стоит сейчас код в самом AR:In addition, each event only contains the state that is necessary to be able to reconstruct the state of the aggregate during replay. This is typically only that state that has been influenced by the invocation that triggered the event, that is, a kind of “diff”. From the point of view of event sourcing, it makes no sense to store additional state on an event that was not influenced by the invocation. So, even if an explicit event UserRegistrationCompleted were persisted, it would not contained any additional state.
public function provideUserDetails(...): void
{
// ...
$this->checkIfRegIsComplete();
}
private function checkIfRegIsComplete(): void
{
if (
$this->phoneNumber
&& $this->phoneNumberValidated
&& $this->userDetails
&& $this-completed === false // Вот этот флаг меняется где-то в мутаторе события UserRegistrationCompleted
) {
$this->apply(new UserRegistrationCompleted($this->userId));
}
}
«Состояние» тут заключается в самом факте завершения регистрации и меняет флаг completed в мутаторе.So, even if an explicit event UserRegistrationCompleted were persisted, it would not contained any additional state.
process these fine-granular events and know at least parts of the domain logic from the
...
ignore events which are not of any interest in the respective bounded context
combine several events to get the whole state required about the user
Я не понял к чему ты сказал про разные базы.Идею с персистом события в одной транзакции я понял. Но это ж обычные, можно сказать инфраструктурные данные, типа обработано событие или нет. Какой тут эвент сорсинг если базы у участников саги могут быть разные?
Я попробую пояснить.Но это ж обычные, можно сказать инфраструктурные данные, типа обработано событие или нет. Какой тут эвент сорсинг если базы у участников саги могут быть разные?