Acelerando o desenvolvimento de microsserviços .NET / C# e Devprime
Tags: csharp, dotnet, microsserviços, tutorial
Published: 2023-12-27 15:34:08

O mercado está passando por um momento importante impulsionado pela transformação digital, o que está levando as empresas a atualizarem seus processos de negócio e estratégias visando maior eficiência e agilidade. A adoção de novas tecnologias permite o desenvolvimento de plataformas digitais que promovem novos canais de vendas, presença online e relacionamento com os clientes.

A abordagem de microsserviços é um facilitador significativo, pois permite isolar contextos de negócio com evolução independente, ágil e segura. Essa arquitetura incorpora diversos fundamentos que promovem novas experiências, como a capacidade de escalar de acordo com a demanda de negócio.

Ao falar sobre microsserviços, lembramos de muitos padrões de sistemas distribuídos, tais como retry, circuit breaker, resiliência, comunicação assíncrona e observabilidade. Esses padrões são essenciais em discussões sobre aplicações modernas nativas de nuvem.

Um fator crucial na estratégia de microsserviços é determinar o tamanho adequado para cada um deles. Minha recomendação é embarcar em uma jornada de Domain Driven Design (DDD) junto às áreas de negócio, a fim de construir uma modelagem e outputs claros, como um Context Map.

Em um projeto tradicional, a tomada de decisões sobre as direções a seguir na implementação técnica de microsserviços geralmente demandaria semanas ou até mesmo meses. Além disso, haveria divergências significativas entre as equipes responsáveis pela implementação.

Neste artigo, abordarei o desenvolvimento de microsserviços utilizando a [Devprime](https://devprime.io), que oferece um projeto completo de arquitetura de software, aceleradores e componentes inteligentes. Essa abordagem permite desenvolver o primeiro microsserviço em apenas 30 minutos, economizando cerca de 70% do investimento no desenvolvimento do backend.

No entanto, neste artigo, demonstrarei que é possível avançar nesses estágios e adotar uma experiência de desenvolvimento de software moderna, seguindo as principais estratégias do mercado.

**Primeiros passos instalando o Devprime Platform**

O primeiro passo é criar uma conta na plataforma [Devprime](https://devprime.io), ativá-la e obter uma licença válida. Em seguida, será necessário instalar uma versão do .NET SDK 7+ compatível com o seu sistema operacional, seja Linux, macOS ou Windows. Certifique-se de seguir as instruções de instalação fornecidas pela Microsoft para o .NET SDK.

Além disso, você precisará instalar uma ferramenta de contenização, como o Docker ou Rancher Desktop, que permitirá a criação e execução de contêineres para seus microsserviços. Essas ferramentas facilitam a implantação e o gerenciamento dos microsserviços em ambientes isolados.

Por fim, será necessário escolher um editor de código para desenvolver seus microsserviços. O Visual Studio Code é uma opção popular e gratuita, mas você também pode usar outras opções, como o Visual Studio Professional, dependendo de suas preferências e necessidades específicas.
Execute os comandos abaixo:

a) dotnet tool install devprime.cli -g
b) dp auth

Prepare o seu ambiente local com os containers do MongoDB, RabbitMQ, SEQ seguindo as instruções na documentação da Devprime (https://docs.devprime.io). Após subir os serviços entre no RabbitMQ crie a Exchange e filas padrões orderevents e paymentevents.

**Criando o primeiro microsserviço em 30 minutos**
O comando “dp new” acionará o engine inteligente da Devprime para projetar uma aplicação microsserviço pronta para produção em segundos economizando o trabalho de semanas ou meses.

```
dp new ms-order –state mongodb –stream rabbitmq
```

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zp72mwjcca4qwdv0yqfv.png)

Nesse momento você já tem um microsserviço pronto para produção conforme descrito anteriormente com um projeto completo de arquitetura de software, padronização, manutenibilidade e funcionalidades especiais fornecidas pela devprime Stack como observability (Log, Distributed Trace, Metrics) , retry and circuit break, resiliência aplicáveis a diversos serviços como banco de dados, stream e consumo de API’s externas.

Para executar no Windows, Linux ou macOS utilize um dos scripts abaixo e lembrando de aplicar um “chmod +x run.sh” para o shell.

```
.\run.ps1 ou ./run.sh (Linux, macOS)
```

 
**Visualizando o novo microsserviços recém-criado pelo Devprime CLI**
A plataforma Devprime já provisionou um novo microsserviços com um projeto completo de arquitetura de software utilizando uma abordagem de Hexagonal Architecture, Event-driven Architecture (EDA) baseado nas principais práticas do mercado e priorizando manutentabilidade, testabilidade e produtividade utilizando os componentes inteligentes da Devprime incorporados me conjunto com os adaptes de tecnologia.

Abra o projeto no Visual Studio Code usando o comando abaixo:
`code .`


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n7yn7uwvuyk9jfxvuzb4.png)

Primeiros itens na imagem:
Web – Exposição de APIs
Stream – Integração com Streams (RabbitMQ, Kafka, AWS SQS, Azure Services BUS, Google PUB/SUB..)
State – Integração com persistências e storage (SqlServer, MongoDB, MySQL, PostgreSQL, ElasticSearch, Redis, Oracle)
Security – Integração com Identity provider (IDP) (Keycloak, Auth0, Azure AD, AWS Cognito, Google Identity Platform…)
Services – Adapter para integração com APIs externas
Observability – Exposição de Logs, Trace, Metrics
Healthcheck – Disponibilidade do serviço
Extensions – Extensibilidade para componentes externo

**Adicionando regra de negócio**
Um dos principais desafios na evolução de aplicações é a padronização das regras de negócio. A plataforma Devprime aborda essa questão por meio do Domain Driven Design (DDD), que padroniza a implementação do código fonte dentro do projeto Domain. Essa abordagem inclui conceitos como Context Map, Bounded Context, Aggregate Roots, Value Objects, Entity, Application Services, Domain Services, Domain Events e Handlers.

Para acelerar a implementação, vamos utilizar um código de exemplo baseado em um marketplace, que contém um código para o Aggregate “Order” e outro para a Entity “Item”. Execute o comando abaixo e observe o resultado:

```
dp marketplace order
```

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bs7d78lebjf7gbbdbfxr.png)

Ao abrir o projeto no Visual Studio Code, você poderá observar a classe de negócio do Marketplace que foi gerada pelo comando executado anteriormente. Essa classe de negócio representa a entidade “Order” dentro do contexto do Marketplace.

A implementação da regra de negócio em si é realizada pela pessoa desenvolvedora após a jornada de Domain Driven Design (DDD) em colaboração com o cliente ou equipe responsável pelo domínio do negócio. Durante a jornada de DDD, o objetivo é compreender e modelar os conceitos, comportamentos e interações do domínio de negócio. Essa modelagem é traduzida em código durante a implementação.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mlrmcn35ccta6rktetr3.png)

**Acelerando as implementações adicionais com aceleradores da Devprime.**
Um poderoso recurso disponível no Devprime CLI é o comando “dp init” que analisa as regras de negócio e implementa diversos estágios comuns gerando código Dependency injection, Application objects, Repository, APIs, Unit test necessários ao ciclo básico do software.

Execute o comando:

```
dp init
```


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mg52gaxfyt8bniyf4d9r.png)

Ao concluir a implementação do microsserviço, você poderá executá-lo e observar o log gerado automaticamente pelo adapter de observabilidade da plataforma Devprime. Esse log é extremamente útil para entender o comportamento e o desempenho do seu microsserviço durante a execução.

Em um ambiente produtivo, o log gerado pelo microsserviço será capturado automaticamente pelo Kubernetes, que é uma plataforma de orquestração de contêineres amplamente utilizada. O Kubernetes é capaz de redirecionar os logs dos microsserviços para uma solução de armazenamento centralizada, como o Elasticsearch.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uhc3z63ob24g2hxljpi7.png)

**Efetuando um post na API do microsserviço**
Ao acessar a URL padrão da API do microsserviço (https://localhost:5001 ou http://localhost:5000), você terá acesso ao Swagger, uma ferramenta de documentação interativa que exibe os endpoints disponíveis na API. Esses endpoints são disponibilizados automaticamente ao utilizar o comando “dp init” e são implementados dentro do adapter web da plataforma Devprime.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mk6ugnurpy3sy87bys3g.png)

Entre na opção “POST” pelo Swagger e preencha os dados e confirme. Esse request será recebido pelo adapter de Web e transportado pelo Application Services e posteriormente na regra de negócio que implementamos anteriormente no domínio conforme log abaixo.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cbiv91uw8bgaif0iwhba.png)

Ao observar o log gerado durante o processamento da solicitação no microsserviço, você poderá entender todo o fluxo de processamento da aplicação, incluindo estágios como a persistência no banco de dados MongoDB e a emissão de eventos no RabbitMQ.

**Explorando os aceleradores para sistemas distribuídos**
Agora chegou o momento de darmos mais um passo no entendimento dos aceleradores de microsserviços presentes no Stack da plataforma Devprime. Neste momento, vamos iniciar o serviço do RabbitMQ no Docker para observar o comportamento automático de retry e circuit breaker.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7e39ev7zukn0rgixbr5a.png)

Ao tentar efetuar um novo POST na API, é possível observar outro comportamento inteligente: caso seja detectado um circuit breaker que resulte em um status de “Not delivered” para o evento, a estratégia de resiliência iniciará um fallback local para preservar esse evento.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1et65427lnggzpeoyr6e.png)

Ao reativar o serviço do RabbitMQ no Docker e o adapter de stream detectar a conectividade, o circuit breaker é desativado e o evento preservado na estratégia de resiliência é recuperado e devolvido automaticamente ao RabbitMQ.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t47rvv4dhplihjvdqkrh.png)

Nessa demonstração, você pôde observar um comportamento incrível e essencial em todas as aplicações modernas, que é oferecido em todos os projetos baseados na plataforma Devprime. Essa capacidade de lidar automaticamente com falhas, como o circuit breaker e a estratégia de resiliência, torna as aplicações mais robustas e confiáveis, garantindo uma experiência melhor para os usuários.
A plataforma Devprime fornece essas funcionalidades como parte integrante de seus projetos, facilitando o desenvolvimento de microsserviços resilientes e distribuídos.

**Explorando os testes unitários**
Além de todo o fluxo de implementação realizado pelo comando ‘dp init’, outro item muito interessante são os casos de testes unitários, que servem como guia para as pessoas desenvolvedoras de software utilizarem como modelo no desenvolvimento dos testes unitários.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hs24l0gf4f7rlw3ddhex.png)

**Considerações finais**
Neste artigo, demonstramos um exemplo básico de utilização dos aceleradores da plataforma Devprime, que auxiliam na implementação do primeiro microsserviço cloud-native em 30 minutos. Esses aceleradores também contribuem para economizar aproximadamente 70% dos custos de desenvolvimento do backend, além de oferecerem um projeto de arquitetura de software moderno, customizável e evolutivo.

A plataforma [Devprime](https://devprime.io) proporciona uma abordagem eficiente e ágil no desenvolvimento de microsserviços, com suporte a padrões como Domain-Driven Design (DDD), resiliência, comunicação assíncrona e observabilidade. Ela oferece uma ampla gama de recursos, desde a inicialização rápida do projeto até a implementação de estratégias avançadas de tolerância a falhas.

Ao adotar a plataforma [Devprime](https://devprime.io), as empresas podem acelerar o processo de desenvolvimento, reduzir custos e obter uma arquitetura robusta e escalável. Além disso, a possibilidade de customização e evolução permite adaptar a plataforma às necessidades específicas de cada projeto.

Em suma, a plataforma [Devprime](https://devprime.io) é uma excelente escolha para impulsionar o desenvolvimento de microsserviços, proporcionando eficiência, qualidade e flexibilidade. Ao aproveitar os benefícios oferecidos pela plataforma, as empresas podem se destacar no mercado, entregando soluções digitais inovadoras e de alto desempenho.


O que achou? Participe nos comentários e compartilhe!!!

Até a próxima!!

Ramon Durães
CEO, Devprime



Image: Freepik / BiZkettE1