GithubHelp home page GithubHelp logo

event-bus-example's Introduction

Implementação do Event Bus em Node.js com NestJS e RxJS

Você já implementou esse padrão em algum projeto? Veja como é interessante e simples. Podemos transformar completamente o comportamento da nossa aplicação!

Imagine ter uma aplicação de grande escala contendo muitas classes interagindo entre si, e você deseja uma maneira de fazer com que essas classes se comuniquem, mantendo os princípios de baixo acoplamento e separação de responsabilidades. O padrão Event Bus pode ser uma excelente solução para o seu problema.

O que é um Event Bus?

A ideia de um barramento de eventos é bastante semelhante ao barramento estudado em redes (topologia de barramento). No nível dos componentes de uma aplicação, os "computadores" são os componentes do seu aplicativo, a "mensagem" é o evento ou os dados que você deseja comunicar e o "pipeline" é o seu objeto EventBus.

Exemplo de Uso

Neste exemplo, vamos mostrar como usar um Event Bus em uma aplicação Node.js utilizando o framework NestJS.

Estrutura do Projeto

src/
├── common/ # Pacote de arquivos compartilhados
├── email-handlers/ # Módulo do serviço que simula o envio de e-mail
├── event-bus/ # Módulo do event-bus
└── user/ # Módulo de usuário

Implementação com RxJS

Para implementar o Event Bus em nosso projeto de exemplo, utilizaremos a biblioteca RxJS (Reactive Extensions for JavaScript), conhecida por sua programação reativa em JavaScript. Ela é especialmente útil para lidar com fluxos de eventos assíncronos de maneira simples e declarativa.

Exemplo de Implementação

Aqui está a implementação do serviço em nosso módulo EventBus, utilizando RxJS. Nele, temos métodos como publish e ofType, que facilitam o envio e a recepção de eventos de forma intuitiva.

Exemplo Prático

Criamos um modelo de evento para o registro de contas. Cada vez que um usuário é criado, um novo evento é publicado para informar ao sistema sobre os dados desse novo usuário.

Inscrição em Eventos

Desenvolvemos um módulo chamado email-handlers para simular um serviço de envio de e-mail. Por enquanto, estamos apenas exibindo logs dos eventos para demonstrar que tanto a publicação quanto a inscrição nesses eventos estão funcionando.

Benefícios

A implementação do EventBus pode ser benéfica para sua base de código, pois ajuda a acoplar livremente suas classes e promove um padrão de publicação-assinatura. Também facilita a interação entre componentes sem que eles estejam cientes uns dos outros.

event-bus-example's People

Stargazers

Iman avatar  avatar Diego Picoli avatar Caique reis avatar

Watchers

Israel Ludolf avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.