Como criar uma diagrama de classe para um projeto com arquitetura de microsserviços

olá pessoal bom minha maior duvida até o momento é que eu não estou conseguindo elaborar meu diagrama de classe baseado na arquitetura de microsserviços pois o que fiz segue um principio de arquitetura monolitica e preciso do diagrama para conseguir criar o banco e dar sequencia no desenvolvimento do projeto os requisitos do projeto estão abaixo:

Registro e Autenticação de Usuário
Gerenciamento de Perfil de acesso
Enviar Notificações e alertas (Avisos)
Enviar Notificações e alertas (Avisos de Estágios)
Pesquisar por Notícias
Sistema de Tópicos

vamos a explicação dos requisitos no meu projeto tenho duas aplicações sendo elas uma aplicação WEB que o usuario secretario envia avisos para os alunos que recebem e visualizam os avisos por meio de um app.

e com base nisso eu não consigo criar o diagrama que represente a arquitetura de microsserviços, já recorri até a IA mas ela não consegue me explicar visualmente como as classes se relacionam pois já que na arquitetura de microsserviços cada microsserviço tem um banco como fica a relação visualmente falando tenho o seguinte diagrama que fiz porem acredito que tenha algo a alterar


a ideia do projeto e que o secretario envie os avisos para os alunos, e os alunos recebem o aviso pelo app mas o aviso é enviado com base no curso que o aluno informou no caso a classe notificação envia a notificação de novo aviso para o Rabbitmq, o rabbitmq envia para o firebase cloud message que chega para o aluno no app ex. quando recebemos uma notificação de novo email

me ajudem por favor!!!

Olá, Daniel.

Então, quando estamos falando em microserviços, não faz sentido (diria até mesmo que vai contra alguns princípios da arquitetura) criar um diagrama de relacionamento de classes que fazem parte de diferente serviços (note que aqui estou falando de serviços DIFERENTES, não estou dizendo que não se deve criar esses tipo de diagrama para representar um único serviço).

Cada microserviço, deve ter seu escopo bem definido e os detalhes internos de sua implementação não necessariamente vão ser conhecidos pelos demais componentes do sistema.

Vou te dar o exemplo de onde trabalho atualmente, o ecossistema contém mais de 100 serviços e possuí diferente equipes que são responsáveis por esses componentes, eles vão desde serviços de negócio(que é o que interessa ao cliente), até tarefas genéricas como log shipper, autenticação, orquestração, etc… Quando estamos trabalhando com um serviço que não pertence ao nosso domínio, não nos interessa sua implementação interna, o que importa é a funcionalidade que ele ofereçe.

Trazendo isso para o seu sistema, temos o serviço de notificação. Ele precisa saber para quem enviar a notificação e ter os dados necessários para que essa notificação chegar ao usuário correto. Mas ele não precisa conhecer, nem estabelecer uma relação com os detalhes internos do serviço de registro de usuários. O que importa para ele é que exista uma interface(rest, grpc, thrift, soap, etc…) para acessar os dados necessários no registro de clientes.

O motivo pelo qual disse que até pode ser considerado uma quebra do princípio da arquitetura: não importa como o um serviço funciona ou como armazena dados, amanhã isso pode mudar completamente e não deve afetar os demais serviços, a única coisa que importa é a interface de comunicação entre os serviços manter a compatibilidade.

No momento que você desenha um diagrama de classes de um ambiente de microserviços, na verdade você tem um monolito distribuido( se te interessar sobre o assunto pode dar uma olhada nesse link ou outros existem muito conteúdo sobre isso: Microservices Antipattern: The Distributed Monolith 🛠️ | by Mehmet Ozkaya | Medium)

Agora que eu falei tudo isso (desculpe pela demora, mas achei necessário para você entender melhor o motivo para minha reposta para sua pergunta original), vamos a minha resposta, acredito que na verdade o que você quer é um diagrama para representar as interações entre os seus serviços, vou colocar uma imagem de exemplo aqui,ela é autoexplicativa. O nível de detalhes que você quer chegar no diagrama depende da sua necessidade.

Deixar bem claro que peguei uma imagem qualquer do google, isso não é de minha autoria.

Qualquer dúvida se eu conseguir responder estou a disposição.

1 curtida