Один мой коллега, собаку съевший на управлении данными, подкинул интересную мысль: мол, можно трактовать любое событие (в событийно-ориентированной архитектуре) как изменение данных, и наоборот. Таким образом, предполагается, что можно программировать сколь угодно сложную систему и как связь событий-реакций, и как последовательность изменения данных. Выглядит заманчиво, но спорно, поэтому давайте разберёмся по-порядку.
Первый пример, который приходит в голову: вы едете по шоссе из точки “А” в точку “B” с разрешённой скоростью в 90 км/ч. Поездка проходит успешно, но через неделю вы получаете уведомление от ГИБДД со штрафом за превышение скорости на 30 км/ч.
Это реальный, жизненный пример? Безусловно. Всем понятно, что произошло: по дороге вы не заметили знак населённого пункта, где и стояла автоматическая камера.
Однако теперь вернёмся к миру программирования. Произошло ли событие? Однозначно произошло – вы превысили скорость. Вот даже timestamp напечатан на бумажке, которую вы держите в руках. Но произошли ли в тот момент какие-то изменения в ваших данных? Однозначно нет.
Вы тащились свои 90 км/ч на круиз-контроле, придерживая коленкой руль и насвистывая песенки под магнитолу. Никаких изменений данных в вашей системе координат не произошло. Если бы той камере на объектив уселась бы птичка, вы бы не получили никаких уведомлений от ГИБДД.
Однако, напомню, и в этом случае само событие произошло: вы превысили скорость. Независимо от того, засекла вас камера или нет.
Давайте попробуем развернуть вопрос в обратную сторону. Бывают ли случаи, когда изменение данных не означает никакого события?
Да легко: переключение значения текущего времени на ваших часах с 23:59:59 на 00:00:00 каждую полночь. Это изменение данных? Однозначно! Ещё при этом меняется значение даты и дня недели.
Однако, произошло ли при этом какое-то событие? Нет. Земля, вращаясь вокруг солнца, никак не изменила скорость своего вращения. Электроны, бегущие по микросхемам ваших часов, продолжают бежать как бежали. Если вы уже крепко спите в это время, то вы вообще не заметите ничего произошедшего.
Однако где-то на каком-нибудь заводе в это время усталый слесарь бросит свои инструменты, вытрет руки масляной тряпкой и пойдёт пить пиво. Для него полночь – однозначное, понятное и контролируемое событие, имеющее понятное следствие.
Мораль? Да нет никакой морали. По-прежнему непонятно, эквивалентны ли эти два подхода, или они взаимно дополняют друг друга. Если вам есть что сказать по этому поводу – welcome в комментарии к посту.