惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
Last Week in AI
Last Week in AI
T
Tailwind CSS Blog
WordPress大学
WordPress大学
B
Blog RSS Feed
T
The Blog of Author Tim Ferriss
F
Fortinet All Blogs
aimingoo的专栏
aimingoo的专栏
MongoDB | Blog
MongoDB | Blog
博客园 - Franky
C
Check Point Blog
P
Proofpoint News Feed
H
Help Net Security
月光博客
月光博客
博客园_首页
Stack Overflow Blog
Stack Overflow Blog
博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
Recent Announcements
Recent Announcements
人人都是产品经理
人人都是产品经理
U
Unit 42
美团技术团队
I
InfoQ
A
About on SuperTechFans

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
Event-Driven Architecture: sistemi che reagiscono invece ...
Dev-Iadicola · 2026-06-27 · via DEV Community
Cover image for Event-Driven Architecture: sistemi che reagiscono invece di chiedere

Dev-Iadicola

Il problema: catene di chiamate rigide

Quando un utente si registra, il sistema deve: inviare l'email di benvenuto, creare il profilo default, notificare il team di vendita, aggiornare le statistiche, attivare il periodo di prova. Il controller chiama cinque servizi in sequenza. Se aggiungi un sesto step (integrazione CRM), devi modificare il controller. Se il servizio email e lento, rallenta tutto. Se fallisce, blocca i passaggi successivi. Le dipendenze crescono linearmente con le funzionalita.

L'architettura event-driven inverte il flusso: il controller fa una sola cosa — registra l'utente e pubblica un evento UserRegistered. Ogni componente interessato reagisce all'evento indipendentemente. Il controller non sa quanti listener ci sono, ne cosa fanno. I listener non si conoscono tra loro.

Concetti fondamentali

Evento: un fatto accaduto

Un evento e un fatto immutabile che descrive qualcosa che e già successo: OrderPlaced, PaymentReceived, ArticlePublished. Non e una richiesta ("fai qualcosa") ma una notifica ("e successo qualcosa"). Questa distinzione e fondamentale: l'emittente non si aspetta una risposta e non sa chi sta ascoltando.

Producer e Consumer

Il producer emette l'evento. Il consumer (listener/subscriber) reagisce. Un evento può avere zero, uno o molti consumer. Aggiungere un consumer non richiede modifiche al producer. Rimuoverne uno non rompe nulla.

Esempio teorico: ciclo di vita di un ordine

  • OrderPlacedSendOrderConfirmationListener invia l'email, ReserveInventoryListener blocca lo stock, NotifyWarehouseListener prepara la spedizione, UpdateDashboardListener aggiorna le metriche
  • PaymentReceivedConfirmOrderListener aggiorna lo stato, GenerateInvoiceListener crea la fattura
  • OrderShippedSendShippingNotificationListener notifica il cliente, StartDeliveryTrackingListener attiva il tracking

Ogni listener e una classe isolata, testabile, che fa una sola cosa. Aggiungere un'integrazione con un nuovo sistema di analytics? Crei un listener, lo registri sull'evento, e tutto funziona senza toccare il codice esistente.

Sincrono vs Asincrono

  • Sincrono: i listener vengono eseguiti nella stessa request. Semplice, ma se un listener e lento, rallenta la response. Adatto per operazioni veloci e critiche (validazione, aggiornamento stato).
  • Asincrono: i listener vengono accodati (Redis, RabbitMQ, database) e eseguiti da worker separati. Non rallenta la response. Adatto per operazioni lente (email, PDF, integrazioni esterne) o non critiche.

In pratica, la maggior parte dei sistemi usa un mix: alcuni listener sincroni per le operazioni critiche, altri asincroni per il resto.

Event-Driven in Soft PHP MVC

Il framework usa eventi tramite l'Observer Pattern nei Model: i lifecycle hooks (beforeSave, afterSave, beforeDelete) sono eventi sincroni che permettono di reagire ai cambiamenti delle entita. Il CacheObserver invalida la cache quando un articolo viene modificato — senza che il Model sappia che la cache esiste.

Quando usare Event-Driven Architecture

  • Usa eventi quando un'azione ha effetti collaterali che non sono responsabilità del componente che la esegue
  • Usa eventi quando vuoi che nuove funzionalita possano "agganciarsi" senza modificare il codice esistente
  • Usa eventi quando il disaccoppiamento tra componenti e una priorità
  • Non usare eventi per flussi lineari semplici dove una chiamata diretta e più chiara
  • Non usare eventi se il debugging e già difficile: gli eventi rendono il flusso meno tracciabile

L'architettura event-driven non e un'alternativa a MVC o Hexagonal: e un principio di comunicazione che si applica dentro qualsiasi architettura. Quando i componenti reagiscono a fatti invece di essere chiamati direttamente, il sistema diventa più flessibile, più estensibile e più resiliente.


👉 Leggi l'articolo completo su iadicola.it