Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/robsantossilva/fullcycle-event-driven-architecture
https://github.com/robsantossilva/fullcycle-event-driven-architecture
Last synced: about 1 month ago
JSON representation
- Host: GitHub
- URL: https://github.com/robsantossilva/fullcycle-event-driven-architecture
- Owner: robsantossilva
- Created: 2022-12-22T01:51:18.000Z (about 2 years ago)
- Default Branch: master
- Last Pushed: 2024-04-10T00:51:08.000Z (9 months ago)
- Last Synced: 2024-04-10T01:51:21.249Z (9 months ago)
- Language: Go
- Size: 12.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# EDA - Event Driven Architecture
### Iniciando com eventos
**Eventos** são efeitos colaterais de um sistema, que aconteceram no passado, e apartir deles outros processos são acionados e decisões são tomadas.
- Situação que ocorreram no passado
- Normalmente deixa efeitos colaterais. Ex.: Porta do carro abriu... Ligar a luz interna.
- Pode atuar de forma internalizada (mesmo sistema) no software ou externalizada (sistemas externos)
- É comum ter a necessidade de externalizar esses eventos.
- Domain Events: Eventos de dominio: Algo aconteceu na camada de dominio, camada de regras de negócio. Uma mudança no estado interno aconteceu --> ex: Agregados### 3 Tipos de eventos
1. **Event Notification:** Quando um sistema deseja notificar uma mudança. Forma curta de comunicação.
```json
{"pedido":1, "status":"aprovado"}
```
2. **Event Carried State Transfer:** Formato completo para trafegar as informações. Modalidade para trafegar dados maiores que precisam ser gravadas. "Stream de dados". É enviado o dados e não a notificação de uma mudança.
```json
{"pedido":1, "status":"aprovado", "produtos":[{}], "tax":"1%", "comprador":"Robson"}
```
3. **Event Sourcing:** É a forma de conseguir capturar eventos e armazena-los em um banco de dados, e o mesmo ser usado como **time series database.** Ex.: Saldo de conta bancaria, é a soma/subtração das transações. É possivel fazer um replay de eventos passados, fazer auditoria.### Event Collaboration
https://martinfowler.com/eaaDev/EventCollaboration.html**Método tradicional**
Etapas distintas mas que acontecem sequencialmente.
Comprou um produto **->** Estoque do produto comprado **->** Muda o catálogo **->** emite nota **->** Separação**Com Event Collaboration** Tudo gera eventos.
Parto do principio que já tenho todas as informações para uma determinada ação.
Não precisa pedir, parte do principio que tudo já esta sendo atualizado.- Fulano Comprou
- Estoque mudou
- Cor mudou
- Não foi emitida
- Erro aconteceu
- Produto mudou a descrição### Entendendo CQRS (Command Query Responsability Segregation)
https://github.com/keyvanakbary/cqrs-documents
https://eximia.co/command-query-responsibility-segregation-cqrs/**CQS vs CQRS** / Maior diferença é o nível de granularidade
Separar Comando de Consulta
**Comando: (Escrita/Alteração)** intenção de MUDANÇA do usuário. "Criar produto"
Comando apenas muda/cria algo, não tem retorno porém, esse processo envolve muitas regras que passam pela camada de dominio.**Consultas: (Leitura)** intensão de obter informação, para por exemplo, hidratar um objeto de dominio, se necessário. Mas, quando separamos o sistema em uma parte que apenas realizam consultas, obviamente que não precisamos do modelo de dominio(DDD). **Foco apenas no dado/retorno.**
### Separação fisica de dados
É possivel guardar os dados fisicamente diferente: Banco de escrita e de leitura.
Com o banco de leitura (NOSQL) podemos ter uma view materializada, evitando JOINS, facilitando a busca.
### Event sourcing vs Command sourcing
**Event sourcing:** Possibilita capturar events e materializar as views.
**Command sourcing:** Estratégia de armazenar os comandos e realizar playback.
### Como implementar CQRS
```bash
/Domain
/Commands
/UseCases
/DAOs vs Repositories
/Queries
/UseCases #Pode ser meu controller? É possivel evitar complexidade nesse caso?
/DAOs vs Repositories
```### Eventos
- Algo que aconteceu no passado
- Inserir o registro -> Registro InsderidoO que pode ocorrer ao inserir um novo cliente
- Disparar Email
- Publicar uma mensagem na fila
- Notificar um usuário no slack
- Inserir esse usuário no Salesdorce### Elementos táticos de um contexto de eventos
- Evento (Carregar dados) -> Elemento principal
- Operações que serão executadas quando um evento é chamado
- Gerenciador dos nossos eventos/operações
- Registrar os eventos e suas operações
- Despachar/Fire no evento para que suas operações sejam executadas