DEV Community

Cover image for Arquitetura Orientada a Eventos
Eduardo Silva
Eduardo Silva

Posted on

Arquitetura Orientada a Eventos

A Arquitetura Orientada a Eventos (AOE) é um modelo de design usado para desenvolver sistemas que reagem a eventos em tempo real. Esse tipo de arquitetura é muito útil em cenários onde é necessário processar informações rapidamente, como em e-commerces e aplicativos bancários.

O que é um evento?
Um evento é qualquer ação ou mudança que ocorre em um sistema. Por exemplo, quando um cliente faz uma compra em um site, isso pode ser considerado um evento. Outros exemplos incluem cliques em botões ou atualizações de dados.

Como funciona a AOE?
A arquitetura funciona com base em três componentes principais:

Produtores de eventos: São as partes do sistema que geram eventos.
Consumidores de eventos: São responsáveis por receber e reagir aos eventos.
Corretor de eventos: Um intermediário que distribui os eventos dos produtores para os consumidores.
Quando um evento ocorre, ele é capturado e enviado para um corretor, que o entrega aos serviços ou sistemas interessados nesse tipo de evento.

Benefícios da AOE
Escalabilidade: Permite que sistemas cresçam de forma eficiente, já que eventos podem ser processados de forma assíncrona.
Desacoplamento: Os produtores e consumidores não precisam conhecer os detalhes uns dos outros, tornando o sistema mais flexível.
Respostas em tempo real: Ideal para aplicações que precisam reagir rapidamente a mudanças.

Um exemplo muito simples em Java OOP ☕:

// Definição do evento
class PedidoCriadoEvent {
    private String idPedido;

    public PedidoCriadoEvent(String idPedido) {
        this.idPedido = idPedido;
    }

    public String getIdPedido() {
        return idPedido;
    }
}

// Interface para o consumidor (listener)
interface PedidoCriadoListener {
    void onPedidoCriado(PedidoCriadoEvent event);
}

// Produtor do evento
class SistemaDePedidos {
    private PedidoCriadoListener listener;

    public void registrarListener(PedidoCriadoListener listener) {
        this.listener = listener;
    }

    public void criarPedido(String idPedido) {
        System.out.println("Pedido criado com ID: " + idPedido);
        if (listener != null) {
            listener.onPedidoCriado(new PedidoCriadoEvent(idPedido));
        }
    }
}

// Consumidor do evento
class EnvioDeEmail implements PedidoCriadoListener {
    @Override
    public void onPedidoCriado(PedidoCriadoEvent event) {
        System.out.println("Enviando e-mail para o pedido: " + event.getIdPedido());
    }
}

// Simulação
public class Main {
    public static void main(String[] args) {
        SistemaDePedidos sistema = new SistemaDePedidos();
        EnvioDeEmail envioDeEmail = new EnvioDeEmail();

        sistema.registrarListener(envioDeEmail);
        sistema.criarPedido("12345");
    }
}

Enter fullscreen mode Exit fullscreen mode

O que acontece neste exemplo?
Produtor: A classe SistemaDePedidos cria um pedido e notifica os interessados.
Consumidor: A classe EnvioDeEmail reage ao evento, enviando um e-mail para o pedido criado.
Desacoplamento: O SistemaDePedidos não sabe o que o consumidor fará com o evento, apenas o emite.

Sim, como eu disse foi um exemplo bem simples, simulando com a comunicação entre classes usando Listeners.

Valeeeeu

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Discover a treasure trove of wisdom within this insightful piece, highly respected in the nurturing DEV Community enviroment. Developers, whether novice or expert, are encouraged to participate and add to our shared knowledge basin.

A simple "thank you" can illuminate someone's day. Express your appreciation in the comments section!

On DEV, sharing ideas smoothens our journey and strengthens our community ties. Learn something useful? Offering a quick thanks to the author is deeply appreciated.

Okay