Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Django como um detalhe de implementação

Django como um detalhe de implementação

Python Brasil 2020

Avatar for Paulo Henrique Silva

Paulo Henrique Silva

November 03, 2020

Other Decks in Programming

Transcript

  1. Quem sou eu? • Paulo Henrique Silva, aka pH •

    Engenheiro de software na Carta (carta.com) • Fundador do Curta (curta.io) • 20+ anos na área, de programador de jogos à controle de observatórios astronômicos, fintechs, retail techs e outros. • Python/Rust/C++/Java.*/… • e pai da Norah (que deve estar nos assistindo) @phsilva phsilva.dev
  2. Agenda • Considerações • Django, visão geral • Filosofia da

    entrega, ou Afinal por que Django deveria ser um detalhe? • O que ganhamos com isso? • Onde focar? ◦ Modelos ◦ Views
  3. Considerações • Tempo, tempo... • Difícil mostrar exemplos complexos sem

    perder o fio e exemplos simples não deixam claro os problemas. • Incompleto. Mesmo assim… aqui vão minhas opiniões e ideias, nada além disso.
  4. • O framework web mais usado no mundo Python. •

    Muitas coisas e uma coisa para cada um. • MVC-ish • ORM e HTTP
  5. Entrega • Nós entregamos valor à sociedade, ou pelo menos

    buscamos isso. • Profissionais • Mudanças de requisito • Adaptação
  6. Complexidade • Arquitetura • Aprendizado • Software • Complexidade ◦

    Essencial ◦ Acidental • Desacople! • Django não é o seu problema*
  7. Benefícios • Agilidade • Ambiente de desenvolvimento saudável • Testabilidade

    • TDD • Soft novamente * resultados passados infelizmente não são garantias de sucesso futuro.
  8. • Modelos • Serviços • Mundo externo ◦ HTTP e

    outros Arquitetura limpa, hexagonal ou functional core, imperative shell
  9. Não aquele modelo (django.db.models.Model) Modelo • classe pura • dataclasses

    • cattrs • pydantic fastapi • serialização JSON/YAML/RPC • Adapters e DTOs • Repositories
  10. ~ Aquilo que antes estava copiado na view... Serviços •

    abstrato • não depende do Django • casos mais complexos exigem mais níveis, serviço chamando serviço. • inversão de dependência
  11. Juntando tudo HTTP Django View View só cria serviços, transforma

    o HTTP request em algo necessário para o serviço e delega o trabalho para este . V Serviços ou Controllers Só usam modelos puros. Sem acesso ao banco diretamente*, somente colabora com os data models ou aggregates. C Modelo Onde mora quase toda sua lógica de negócio, aquilo que torna seu app/site único! M * acesso ao banco restrito aos Repository que recebem input puro e retornam Modelos puros
  12. Finalizando... • A busca deve ser constante. • A arquitetura

    não vem de graça e nem no começo da jornada. @phsilva phsilva.dev