Salve, Deus, beleza? Continuamos essa saga aqui no Domain Dream Design. Agora nós vamos falar sobre um assunto que é muito importante para o DDD. A gente tem que entendê-lo bem. E ele vai ser útil para a gente de várias maneiras. Inclusive, quando a gente ver isso funcionando, vai ser muito legal. Vai abrir... assim, a sua cabeça acaba explodindo. Então, vamos falar sobre eventos de domínio e eventos de integração. Esse é o nosso assunto da aula. Esse é o nosso assunto da aula. Eventos de domínio e eventos de integração. Dado o contexto aqui da nossa venda de ingressos, a gente tem aqui para cima uma relação entre... Vou pegar aqui o espaço da solução. Será que eu consigo arrastar ela lá para baixo? Dado a relação que nós temos entre os nossos subdomínios, do nosso domínio de venda de ingressos. Eu não quero agora ficar importando com cliente, fornecedor. A gente não está olhando agora para esse caso, porque nós estamos nos importando com a parte tática. pegando aqui o nosso contexto de eventos que é core domain a gente acaba tendo aqui uma operação de negócio que é fazer a reserva então esse fazer a reserva vai acabar gerando a gente fala de um evento de domínio que é um acontecimento de uma regra de negócio que foi processada a gente pode chamar isso aqui de reserva feita. Ou reserva aprovada, enfim. Dentro do fazer a reserva tem várias coisas acontecendo. Tem que ter o pagamento, tem que fazer algumas verificações, mas depois que essa reserva aconteceu, tem uma reserva feita, o evento. Dentro desse evento, eu tenho a data que ele ocorreu ali, a data hora que foi ocorrida, mais o agregado que foi envolvido e os devidos dados, que é o ID do lugar, o ID do evento, a pessoa que fez, alguma informação financeira da transação que foi feita. Então, qualquer processamento de regra de negócio nossa pode envolver um evento, até uma operação um pouco mais simples. Vai ter um momento na nossa aplicação que... Vou colocar isso aqui... De laranja, eu tenho um registrar cliente. Antes do cliente fazer a compra, ele não tem que criar uma conta, pelo menos no nosso sistema, acho que isso é meio óbvio. Mas até mesmo essa operação aqui, ela vai acabar, inclusive eu vou fazer outra coisa para ficar mais fácil aqui para mim, eu vou selecionar esse carinha aqui, aqui e aqui, vou retirar, porque aí eu tenho um pouco mais de espaço. Então, eu tenho registrado o cliente, o que vai acontecer? Cliente registrado. O evento é sempre no passado. Os eventos, a gente está acostumado a trabalhar muito com os ORMs, eu tenho ali o antes de cadastrar no banco de dados. a trabalhar muito com os ORMs, eu tenho ali o antes de cadastrar no banco de dados. Não fique pensando aqui em banco de dados ou no seu framework. Pense no evento como um processo de negócio que aconteceu. Então, toda vez que acontece uma regra de negócio, eu tenho esse evento. E esse evento aqui, ele pode servir como uma referência para que outros agentes dentro do meu contexto delimitado façam alguma operação. Vamos supor que eu tenha aqui a minha reserva, mas aí, lá dentro do agregado de eventos, eu tenho um contador do número de lugares disponíveis. Eu poderia, nessa operação aqui de fazer a reserva, já debitar aquele lugar disponível. que vai ser diminuir total de spots. Essa operação é disparada quando esse evento acontecer. Inclusive, tanto o Vernon quanto o Evans recomendam que você... Isso é uma recomendação. Você trabalhe com um... Manipulando um tipo de agregado para persistência, para poder salvar ele no banco de dados por vez, por negócio. Se você precisa operar outros agregados, faça isso através dos eventos para que esses agregados fiquem mais independentes ainda. Então, o evento de domínio serve para essa situação aqui. Ele pode servir também para que a gente armazene um histórico de tudo o que acontece. A gente pode trabalhar com o conceito de event sourcing que vocês vão ver no Event-Driven Architecture. Então, imagina só que toda regra de negócio que está acontecendo, ela vai gerar um evento que vai ser adicionado lá na nossa tabela de eventos. Então, eu tenho uma auditoria, um histórico de tudo que aconteceu, inclusive ligado até com quem fez. A gente tem muitos benefícios em volta disso. Eu posso trabalhar com inteligência nos dados, fazer auditoria, gerar projeções, enfim. O DDD permite que a gente faça muitas coisas com esses eventos. Mas dentro de um contexto delimitado, eu tenho as operações que ocorrem, mas pode acontecer que um outro contexto está interessado nessa reserva que foi feita. E nesse caso, o nosso é o e-mail, não é? Porque quando uma reserva é feita, a gente vai precisar enviar lá o e-mail para o cliente que foi tudo feito e tal. Nós temos um outro contexto. Então, quando eu tenho um evento de domínio que notifica que aconteceu ali dentro do próprio domínio, ele precisa ir para um outro contexto, a gente vai chamar esse evento de evento de integração. Emitindo a integração entre esses contextos diferentes. Aí a gente pode pegar esse carinha aqui e fazer, recalchutar ele. Posso ter uma necessidade para poder mandar lá para o e-mail. Posso querer mandar mais dados, menos dados, ou um formato diferente. Então, vamos colocar assim, como é que seria evento de integração reserva feita, vou colocar desse nome assim, eu estava pensando em termos ali de programação, então aconteceu uma reserva, o próprio domínio é notificado por esse evento de domínio e o evento de domínio gera um evento de integração e outros interessados podem escutar. Aí é que, precisa de usar uma ferramenta de mensageria? Sim ou não. Isso depende da decisão do seu projeto. Mas nesse caso aqui, se a gente conseguir trabalhar de forma assíncrona, vai ser interessante, porque eu diminuo o acoplamento entre esses dois contextos aqui. Mas olha que interessante. Tudo que vai acontecendo está acontecendo de forma registrada e permite que a gente faça a comunicação entre os agentes do sistema através de eventos. Eventos sempre tendem a diminuir acoplamento, a permitir que as nossas regras de negócio sejam modificadas e cresçam de forma mais saudável, que dê menos trabalho para a gente poder manter isso. Porque a gente acaba criando processos de negócio que são mais coesos, mais focados. E fica até mais fácil também para poder testar tudo isso, porque se eu tenho que fazer outras coisas após aquele evento que aconteceu, eu posso testar aquela coisinha separada, depois posso fazer a integração, testar a integração entre elas. Beleza? Na próxima aula, a gente vai aproveitar aqui esse gancho e falar um pouquinho sobre a questão de contextos delimitados e também de microserviços. Então, vamos continuar nossa saga. É isso aí e até a próxima.