Значна частина плутанини між "передачею повідомлення" та "на основі подій" пов'язана з архітектурними та деталями реалізації. Я бачив (і письмово) системи, керовані подіями, які фактично використовують повідомлення, надані ОС для своєї реалізації. Я здогадуюсь, ти справді маєш на увазі архітектурні ідеї.
Оскільки багато людей вже вказали, що "передача повідомлень" та "подія на основі" насправді не є достатньо хорошими термінами, щоб уникнути двозначності.
Які відносні переваги системи "передача повідомлення" проти системи "на основі подій".
Повідомлення проходить
Я розпочну з здогадки, що коли ви говорите систему "проходження повідомлення", ви говорите про систему, якій один об'єкт витрачає повідомлення на певний інший об'єкт. Коли я думаю про систему, засновану на цій парадигмі, я загалом думаю про систему, де об’єкт, який щось виявляє, знає, кому потрібно про щось розповісти. (Я не вказую, як це знає, просто те, що він знає.)
Цей тип архітектури дуже хороший для систем, де виробники та споживачі добре відомі. Або виробник повідомлення знає, хто повинен його отримати, або споживач повинен знати, від кого отримати повідомлення.
Якщо ви пишете заявку на банківську діяльність, можна очікувати, що ви дійсно хочете знати, кому ви надсилаєте свої транзакції та до кого вони надходять.
На основі подій
Інша система, на яку я вважаю, про яку ви думаєте, коли ви говорите про систему, що базується на подіях - це та система, де об’єкт викликає "подію", не знаючи, хто (якщо хтось) відповість на це.
Цей тип архітектури, керованої подіями, дуже добре підходить для систем, де виробник не переймається тим, хто споживає подію або де споживач не переймається тим, хто подіяв.
Загалом ці системи чудові там, коли ви не знаєте відносин між споживачами та виробниками, і де очікуєте, що відносини будуть динамічними.
Я використовував цю систему в системі, де програма фактично складалася з динамічно налаштованих модулів (плагінів), завантажених під час виконання. Коли модуль був завантажений, він реєструється для подій, які його хвилювали. Результатом стала система, в якій було дуже легко розширити функціонал.
Наприклад, припустимо, умова підвищеної події EA, яка зазвичай викликала відповідь RA. Об'єкт, який викликав відповідь РА, просто зареєструвався для отримання ЕА події та діяв на нього, коли він прибув. Скажімо, ми хочемо додати нову відповідь до EA під назвою RA_1. Для цього ми просто додаємо новий об’єкт, який шукає EA та генерує відповідь RA_1.
Ось кілька прикладів (використовуючи вашу термінологію):
- "повідомлення проходить" : Ваш начальник каже вам заповнити свій часовий лист.
- "подія" : Секретар відділу розсилає електронне повідомлення всім, нагадуючи їм, що їх графіки розроблені сьогодні.