5 exemplos da melhor utilização do Ruby
Já alguma vez pensou no que podemos fazer com Ruby? Bem, o céu é provavelmente o limite, mas temos todo o gosto em falar sobre alguns casos mais ou menos conhecidos...
O Pub/Sub pode trazer muitos benefícios para o projeto - pode tornar o código limpo, dissociar serviços e torná-los facilmente escaláveis. Saiba mais sobre o Pub/Sub no artigo seguinte e eleve o nível do seu projeto!
Rubi sobre Carris (Rails, RoR) é uma conhecida estrutura de aplicações web escrita em Rubi linguagem de programação. Pub/Sub é uma designação abreviada dos padrões de conceção de software denominados Publicar-subscrever. Vou explicar como a comunicação entre componentes de software no Rails pode ser tratada pelo Pub/Sub.
Pub/sub é um padrão de conceção de software que permite a comunicação serviço-a-serviço. Serviço
implica um dos dois papéis: editor (que produz) ou recetor (que consome). O que é
produzido para ser consumido é determinado como um evento ou uma mensagem ou uma notificação. No
No contexto do presente artigo, são utilizados indistintamente para designar a mesma coisa.
O serviço que produz não sabe quem consome. O serviço que consome não
conhecem a origem da mensagem. Podem permanecer desconhecidos um para o outro. É diferente de
filas de mensagens, em que o componente que envia a mensagem conhece frequentemente o seu destino
- este estilo de envio de mensagens permite-lhe enviar mensagens para qualquer lugar. Este mecanismo é um dos principais
de Pub/sub e isso significa que estão dissociados.
Para exprimirem os seus interesses mútuos, devem partilhar um entendimento comum. Por conseguinte,
ambos os papéis têm um mecanismo implícito de "stick" em que o produtor de uma mensagem e o
consumidor da mensagem. Este mecanismo é designado por assunto, subscrição ou tópico. É
responsável pela categorização de mensagens para assuntos, é essencialmente um filtro de mensagens sem estado.
Os tópicos funcionam como estações de transmissão. Um editor produz a mensagem para o tópico,
os subscritores recebem imediatamente a mensagem do tópico. Devido ao facto de os
a forma mais eficiente de trocar mensagens é tratá-las de forma assíncrona.
Por padrão, não há sobrecarga do Rails para padrões de design de software para passar mensagens entre componentes. Os desenvolvedores usam o padrão programação orientada para os objectos (OOP): passar parâmetros a funções, pedir classes sobre valores.
Quando a aplicação é bastante simples, pode ser suficiente. Quando a aplicação cresce, por exemplo, algumas operações precisam de ser efectuadas de forma assíncrona, então o projeto precisa de uma abstração que resolva esse fluxo de trabalho de dados. Em vez de reinventar a roda, os programadores podem implementar Pub/sub para colmatar esta falta de abstração.
Exemplos de código fonte em Rails foram escritos usando a biblioteca
Pub/Sub em Rails (na nomenclatura do Ruby, uma biblioteca chama-se gem): Encontrará mais pormenores no readme da gem. A implementação é composta por módulos:
Descreve a lógica comercial, a fim de fornecer contexto para Pub/Sub e, por conseguinte, tornar mais clara a sua utilização. código.
módulo Notifications
extend PubSub::Domínio
fim
módulo Relatórios
estender PubSub::Domínio
fim
Trata-se de uma classe que descreve o que aconteceu. Declare o nome da classe como auto-descritor do que aconteceu, por exemplo: cancelado, alterado, criado, destruído, enviado, atualizado. Os nomes dos eventos podem ser semelhantes a: ProfitAndLossStatementCreatedEvent, que significa que uma demonstração financeira foi criada.
classe Reports::ProfitAndLossStatementCreatedEvent < PubSub::DomainEvent
atributo :profit_and_loss_statement_id, Types::Strict::Integer
fim
Classe capaz de emitir eventos. O exemplo mostra a criação de um relatório de serviço. Quando o relatório for criado com sucesso, emite o evento de criação desse relatório.
classe Reports::ProfitAndLossStatementService
include PubSub::Emit
def execute
emit(:report_profit_and_loss_statement_created, profit_and_loss_statement_id: id) if result.ok?
end
fim
Esta classe deve ser executada em resposta ao tratamento de um evento.
módulo Notificações
class ReportsProfitAndLossStatementCreatedHandler < PubSub::DomainEventHandler
def call
ReportMailer.profit_and_loss_statement(profit_and_loss_statement).deliver_now
fim
privado
def profit_and_loss_statement
ProfitAndLossStatement.find(event_data.profit_and_loss_statement_id)
end
end
end
Os eventos são ligados aos seus manipuladores através de subscrições.
notificações:
reports__profit_and_loss_statement_created: async
Pub/sub não é uma abordagem comum em Ruby in Rails. Como introduzido no artigo, este padrão pode trazer muitos benefícios para o projeto - pode tornar o código limpo, desacoplar serviços e torná-los facilmente escaláveis.
