🏚 -> Хотите масштабируемую систему? -> 🏰
Системы состоят из:
. Знания – какой-то набор скомпонованных данных, отражающих состояние какого-то понятия / объекта (“Заказ” в интернет-магазине)
. Действия – действия над Знаниями, чаще всего это или CRUD (“получить список Заказов”), или более комплексный набор действий, который производит много CRUD (“оформить Заказ”)
. События – данные, оповещающие о фактах (всегда глагол и всегда в прошлом времени), произошедших в системе над Знаниями во время Действий (при оформлении: “изменился статуса Заказа”, “сформирована накладная в системе доставки”, “произведена оплата”, etc.)
Если про первые 2 понятия присутствуют в любой программе, то про 3-е все успешно забывают, а оно не менее (а часто более) важно!
Ведь именно События позволяют:
1. Разбивать систему на небольшие независимые куски, реагирующие на события друг друга
2. Расширять функционал, создавая системы, который реагируют на события, а не переписывая существующие
3. Знать состояние системы в прошлом (или как минимум поток событий), что позволяет удобнее дебажить
4. etc.
Это сейчас относиться не только к backend или frontend, так можно писать даже библиотеки
О том, как работать с Событиями гуглите:
. DDD Domain и Application Events
. Event Driven Architecture
. Saga pattern
. Orchestration vs Choreography
Ну, или поставьте 15 классов (👌), тогда я сделаю воркшоп на эту тему
———