- Abaixo tem uma prévia de como está toda a estruturação de pastas do projeto:
- src
- adapters
- database
- domain
- actions
- database
- pedido
- interfaces
- database
- pedido
- usecase
- pedido
- web
- pedido
- tests
- adapters
- database
- domain
- actions
- pedido
- usecase
- pedido
- web
- pedido
- Como principal objetivo foi aprender como funciona a arquitetura hexagonal e como ela pode ser aplicada com Python e Flask.
- Segundo ponto foi a inexistência de exemplos de arquitetura hexagonal aplicada com Python.
- Por final é demonstrar como esta arquitetura pode ser aplicada com Python em uma simples API de pedido, e como podemos desacoplar todas as partes de um projeto facilmente.
- Utilizado a linguagem python para desenvolver o projeto.
- Consutruido utilizando o poetry para gerenciar as dependências.
- Utilizado o Flask para servir a API.
- Utilizado o Blueprint para separar as rotas da API.
- Utilizado o Pytest para gerenciar os testes.
- Foi utilizado a arquitetura hexagonal para desenvolver o projeto, como estudo foi utilizado este post para entendimento da arquitetura.
- Encontrado também este diagrama que detalha um pouco mais sobre esta arquitetura.
- No print abaixo tem uma exemplicação de como seria a Arquitetura Hexagonal:
- Toda a aplicação pode ser separada em 3 niveis:
-
Web(Lado esquerdo do print acima)
- Este ponto seria a entrada seria o que o cliente iria chamar para comunicar com a api, esta parte além de receber a requisição por diferentes entradas que podemos ter faria também o pré-processamento, em resumo recebe e entende o que o cliente enviou, para assim montar a comunicação com o "back-end(Domain)" para processar.
-
Domain(Parte do meio do print acima)
- Este ponto seria o processamento da requisição, esta parte recebe o que o lado esquerdo recebeu do cliente e processa de fato, comunicando com os meios externos(Banco de dados, serviços de email, etc.)
-
Adapters(Parte da direita do print acima)
- Aqui seria feito a comunicação com aplicações externas do nosso código, ou seja, tudo o que precisa ser solicitado/enviado exterdo da API será responsabilidade desta parte realizar a implementação.
-
- Com estas separações descritas acima podemos ter uma aplicação muito mais flexivel e aberta para modificações e inclusões.
- Video de demonstração de como executar
- Para poder iniciar é preciso ter instalado as dependências abaixo:
- Após ter instalado as dependências pode ser clonado o repositório do projeto:
git clone https://github.com/Eliezer090/Exemplo_Arquitetura_Hexagonal.git
- Para executar o projeto é preciso estar dentro da pasta do projeto e rodar o comando abaixo para definir que queremos criar o ambiente virtual dentro da pasta do projeto:
poetry config virtualenvs.in-project true
- Após isso pode ser executado a criação e ativação do ambiente virtual:
poetry shell
- Após pode ser executado o comando abaixo para instalar as dependências do projeto(O poetry fará todo o trabalho para nós):
poetry install
- Precisa ser definido também uma variavel global para que o Flask consiga encontrar quem inicia o projeto:
export FLASK_APP=src/main.py
- Após isso pode ser executado o comando abaixo para executar o projeto:
poe start
- Após isso se tudo deu certo, deve estar executando o projeto no endereço http://127.0.0.1:5000
- Rotas do projeto:
- A rota abaixo retorna um json com todos os pedidos cadastrados:
- Para a rota abaixo é preciso enviar um json no body da requisição, com o pedido que deseja ser cadastrado:
- Content-Type: application/json
- Conteudo:
- {"id": 0, "title": "Computador"}
- http://127.0.0.1:5000/api/post_pedido
- Rotas do projeto:
- Para poder executar os testes está sendo utilizado o poethepoet que facilita um pouco a minimizar os grandes comandos e repetitivos que precisamos rodar, para visualizar os comandos disponiveis é só executar "poe" no terminal com isso será exibido os comandos disponiveis e uma breve descrição do que cada um faz.
- Comandos disponiveis hoje:
- poe cove_tests
- Executar todos os testes do projeto.
- poe cove_report
- Monta o resumo dos testes e exibe a porcentagem de atendimento de cada arquivo de teste.
- poe cove_html
- Monta arquivos HTML com base o que o report disponibilizou, fica mais facil de viaulizar qual parte do projeto está e não está atendida pelos testes.
- poe cove_tests
- Cobertura dos testes: