Skip to content

cgentilin/ProjetoTeste

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ProjetoTeste

Contém 2 microserviços que seguem o mesmo princído de design de software, o DDD, Contudo os padrões de arquitetura não são os mesmos.

O microserviço de cliente segue o o padrão arquiterural Explicit Dependencies Uma abordagem mais que pretende ser mais objetiva e clara sobre o relacionamento e dependências entre as clases, que não esconde nada. Digamos ser esta também uma implementação que segue a risca o conceito (KISS)[https://uxdesign.blog.br/a-origem-do-keep-it-simple-stupid-kiss-b24085dc1327], contudo não é uma implementação pobre, foram aplicados os padrões de IOC, DI, CQRS, OOP, Unit Of Work, Repository Pattern, Guard Clauses e testes utilizando xUnit.

O microserviço Cartão, além dos padrões de arquitetura mencionados acima, segue outros mais complexos e sofisticados como o MEdiator resultando em um código com alto nível de desacoplamento, aliás essa a principal vantagem da utilização do padrão, onde o termo acoplamento está relacionado diretamente a custo. O conceito de behaviors é aplicado para validar as requisições utilizando Fluent Validation, toda requisição é validada antes de chegar ao handler aplicando assim o conceito de fast validation.

*A solução utiliza 3 container, mas é possível ter uma visão de todo projeto sem ter que criar e executar os containers. A pasta img contém inúmeras imagens de detalhes de todo projeto, a Wiki do projeto destaca algumas dessas imagens e acrescenta informações.

**A seguir um Roteiro para criar as imagens e containers e executar o projeto. Este roteiro foi validado e produzio o resultado esperado quando executado utilizando uma máquina windows 11 com wsl2 instalado rodando ubuntu 22.04.3 LTS.

  1. Criar uma rede docker
docker network create charles-network
  1. Criar um volume para o mysql
docker volume create volume-mysql
  1. Criar o container com Mysql, mantnha a porta mapeada e a rede
docker run -d --name charles-mysql -p "3306:3306" --network=charles-network -w "/usr/src/script" -v "volume-mysql:/usr/src/script" -e MYSQL_ROOT_PASSWORD=segredo mysql
  1. Copiar o script da pasta scripsts do repositório para o volume criado no item 2.
docker volume inspect volume-mysql  #esse comando mostra o caminho físico da pasta
sudo cp ./create-database-charles-mysql.sql #caminho retornado pelo comando acima. Existem outras formas, mas o script precisa estar na pasta de volume
  1. Alternativa ao passo 4 É possível abrir o código fonte no visual studio criar e rodar uma migration em ambos os projetos. Esse tutorial não descreve esse procedimento.

  2. Executar o script, q se foi copiado corretamente no passo 4 já está dentro do container

docker exec charles-mysql bash -c "mysql -uroot -psegredo < create-database-charles-mysql.sql"
  1. Criar a imagem e container do microserviço cliente na mesma rede do container mysql
docker build -t mscliente:latest .
docker run -d --name mscliente -p "9090:80" --network=charles-network -e ASPNETCORE_ENVIRONMENT=Production mscliente
  1. Criar a imagem e container do microserviço cartão.
docker build -t mscartao:latest .
docker run -d --name mscartao -p "9095:80" --network=charles-network -e ASPNETCORE_ENVIRONMENT=Production mscartao
  1. Confirmar se tudo ocorreu conforme esperado.
docker ps
docker logs mscliente
docker logs mscartao

3container-solucao-rodando

About

Projeto Exemplo DDD + CQRS + Docker

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published