GithubHelp home page GithubHelp logo

williamelias / python_clean_architecture Goto Github PK

View Code? Open in Web Editor NEW
1.0 1.0 0.0 100 KB

This project is designed to learn about clean architecture with python applied project.

Python 98.71% Dockerfile 0.68% Makefile 0.61%

python_clean_architecture's Introduction

Sobre o projeto:

Esse projeto visa o estudo e aplicação (usando linguagem Python) de conceitos relativos ao Clean Architecture (arquitetura limpa).

Ele foi baseado em vários tutoriais e conteúdos obtidos via meio digital, todos referenciados no final desse documento.


Requisitos para rodar os testes

  • python (testado com a versão 3.10)
  • pytest (versão especificada no arquivo 'requirements.txt')

Dicas:

  • Crie um ambiente virtual para executar de forma isolada:

    $ pip3 install virtualenv

    $ virtulenv -p python3 .venv

    $ source .venv/bin/activate

  • execução dos testes:

    $ make test

  • Gerar MER atualizado:

    $ make mer


Noções de Clean Architecture

A arquitetura limpa visa, principalmente, a separação de tudo que é regra de negócio do que é externo a mesma. Na teoria, a aplicação de um modelo de Clean architecture deveria ter:

  • independência de framework
  • independência de interface de usuário
  • independência de banco de dados
  • independência de qualquer elemento externo
  • testabilidade

Pontos positivos

  • Separação da regra de negócio, encapsulamento da mesma.

    • Podemos fazer um parêntese com o 'S' do 'SOLID', pois estamos aplicando , de certa forma, o 'Single responsability principle' no contexto de arquitetura.
  • As regras de negócio podem ser testadas sem a necessidade de uso de interfaces e devemos ter isso como norte, pois uma interface de acesso a aplicação pode mudar, por exemplo: antes via web, agora via console.

  • Maior facilidade na troca de banco de dados, pois não é usada explicitamente uma lib para definição das regras de negócios atreladas ao banco.

  • As regras de negócio não 'veem' o mundo externo. Com isso obtivemos uma visão front up .

Pontos negativos

  • Exige entendimento sobre o negócio e suas regras, para definição do core da aplicação.

  • Possui maior complexidade inicial de aplicação.

Entities (Domínio):

Aqui estarão definidas todas as regras de negócio da aplicação, por exemplo:

Em uma aplicação de Lista de tarefas, poderíamos ter as seguintes entidades e suas regras:

  • Entidade Item, que contém: título (maior que 3 letras), descrição (não obrigatória), prioridade (de 1 a 3)
  • Entidade Lista, que contém: proprietário, items (lista de Item)

User Case (Caso de uso)

Nesse local estabeleceremos alguns fluxos de uso para a aplicação em questão. Aqui estarão regras de negócio na camada da aplicação, essas regras não alteram as regras já feitas nas entidades, mas as usam.

Em uma aplicação de Lista de tarefas, poderíamos ter os seguintes casos de uso:

  • Criar Lista de tarefas
  • Adicionar item a Lista criada previamente
  • Completar lista de tarefas

Adaptadores de Interface - Controllers, Gateways, Presenters (comunicação)

Nessa camada podemos ter, desde serializadoras a repositorios de interação com bancos de dados. No caso, vamos exemplificar um Gateway de persistência de dados (sem atrelar com nenhum banco propriamente dito):

  • Gateway de persistência:
    • será uma interface
    • Terá três métodos
      • armazenar Item
      • deletar Item
      • listar todos Itens para uma Lista

Dessa maneira, seja qualquer a implementação (postgres, sqlite ou até armazenamento em memória com redis cache) teremos esse gateway que define as interações desejadas.

References

https://medium.com/luizalabs/descomplicando-a-clean-architecture-cf4dfc4a1ac6

https://www.alura.com.br/artigos/mer-e-der-funcoes

https://noplacelikelocalhost.medium.com/testing-crud-operations-with-sqlite-a-time-saving-guide-for-developers-7c74405d63d5

https://docs.sqlalchemy.org/en/20/orm/quickstart.html

https://fastapi.tiangolo.com/tutorial/sql-databases/

https://macoratti.net/21/10/net_cleanarch1.htm

python_clean_architecture's People

Contributors

williamelias avatar

Stargazers

Pedro Augusto avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.