Isso acontece quando duas ou mais operações estão com uma forte dependência entre elas, por exemplo, em um cadastro de usuário nós enviamos o email de confirmação logo após cadastrar o usuário no banco de dados.
Essas duas funcionalidades deveriam estar em módulos ou até serviços diferentes, porque interagem com aplicações externas diferentes, uma com o banco de dados e a outra com um serviço de envio de emails, o cadastro de usuário não deveria ser interrompido só porque um email não pode ser enviado.
A situação piora se precisamos adicionar ainda mais operações nesse cadastro e vai virando uma bola de neve!
Uma forma de resolver esse acoplamento é utilizar o padrão de projeto Observer, que funciona como um publicador de eventos, sempre que um usuário for cadastrado um evento “UserCreated” é emitido e outros módulos ou serviços podem se sobrescrever para ser acionado sempre que esse evento acontecer.
Cada serviço que se sobrescreve ao evento “UserCreated” pode lidar com os dados do usuário da maneira que preferir e o cadastro não é mais interrompido se alguma dessas operações falhar.
7 сен 2024