Autonomia & Tecnologia

Desmistificando o conceito de Django Apps

6

O conceito de Django Application é uma das principais sacadas do Django, e um dos grandes responsáveis por sua flexibilidade e alto reaproveitamento de componentes.

A documentação do Django explica brevemente a idéia:

“Uma app é uma aplicação web que faz alguma coisa — i.e., um weblog ou uma simples enquete.”

Esta definição, é geral o suficiente para abranger toda a flexibilidade do conceito, mas na prática dificulta bastante o seu entendimento.

A primeira coisa que precisamos atentar é que Django Applications não são exatamente Web Applications. No contexto do Django, uma Web Application está muito mais para um Django Project. É claro que é possível ter um projeto inteiro com apenas uma app, mas isso definitivamente cheira muito mal.

O segundo ponto que costuma passar despercebido é que uma Django App “faz alguma coisa”, ou seja, faz uma coisa qualquer. É muito importante que sua app tenha uma responsabilidade única e bem definida. Isso viabiliza o reaproveitamento e simplifica a manutenção do seu código.

Por último, mas não menos importante, temos a confusão da “visão monolítica”. Provavelmente porque o conceito é abstrato e o termo “application” tem outros significados, é comum a visão equivocada de que uma app é um “bloco do sistema” ou “conjunto de modelos e views“.

O resultado dessas confusões geralmente é ruim. Criam-se algumas poucas apps para conter os modelos e views principais do sistema, e com o tempo estas apps terminam inchando para comportar outras funcionalidades satélites do projeto. Consequentemente, surgem no projeto:

  • caos;
  • impossibilidade do reaproveitamento da app;
  • códigos duplicados;
  • dificuldade de desenvolver testes;
  • manutenção do sistema difícil e cara;

Em essência, Django Application é simplesmente um pacote Python que segue algumas convenções. Essas convenções são importantes, pois permitem que o Django detecte suas características e agregue suas funcionalidades ao projeto.

Para demonstrar o quão flexíveis e gerais podem ser as app, vou citar algumas:

Concluindo, apps são extremamente poderosas e  podem facilitar muito a sustentabilidade de um sistema. Por tanto, não tenha medo de ter muitas apps em seu projeto. Um simples blog feito em Django pode facilmente ter mais de 15 apps. Então se você está desenvolvendo algo maior que isso e tem poucas apps, reveja suas estratégias para garantir que seu código não fique desorganizado e muito acoplado.

[]’s!

você pode gostar também
  • DIego

    Henrique, muito bom o seu post. Acho que pra ficar melhor, você poderia complementar com alguns exemplos práticos e até algumas sacadas ou pegadinhas que, com sua experiência, você já deve ter passado na hora de dividir o projeto em Aplicações.

    Uma coisa que me deixa um pouco confuso é o caso dos models serem da aplicação e não do projeto em si, logo, por exemplo, pode acontecer de aplicações que façam coisas distintas ficarem inter-relacionadas devido a uma ter que “aproveitar” a tabela de outra , certo ?

    Pensar numa aplicação como algo que faça tudo independentemente é bem legal, como a questão de um sistema de votação que existe por si só. Mas e no caso de um blog por exemplo. Poderíamos separar o sistema de comentário de todo o resto certo ?

    Nesse caso, como os comentários dependem das entradas do blog, ou seja, de uma tabela do blog, ele teria que acessar o model de outra aplicação, no caso o blog, certo ?

    VAleuuu

  • Pingback: Construindo um CRUD com frameworks Python, Parte II: DjangoFrancisco Souza | Francisco Souza()

  • Alex Tercete

    Fala, Herique! Essa sempre foi uma das minhas maiores dúvidas no Django: como tirar proveito das apps?! Infelizmente ainda não consigo enxergar boas formas de desacoplar o código. Você tem alguma dica?

  • Mateus Lorandi

    Muito bom! Como eu vim do Java, logo quando eu começei com o Django não tinha certeza absoluta do que deveria ou não ser uma nova app. Confesso que ainda tenho um pouco de dúvida às vezes, mas com o tempo estou pegando o jeito.

    Valew!

  • Muito bom o post. Concordo plenamente. É muito fácil confundir uma django app com uma web app. Mas o que deve ser feito na prática é completamente diferente.

    Outro exemplo muito bom é a desacoplação do auth em relação ao admin. Muita gente pensa que só se usa o auth se for no admin. A aplicação de auth é dedicada a simplesmente autenticar usuários e verificar suas permissões.

  • Adorei este texto. E me ajudou muito na questão de pensar em como fazer as coisas dentro do django.
    Até então pensava ainda como java : um app era um webapplication (para java).
    Assim acabava com uma pilha de código pouco organizada e impossivel de reaproveitar.
    Prometo que vou fazer um refactoring aqui para adequar. Obrigado cara.