Quando criar um novo aplicativo (com startapp) no Django?

102

Eu pesquisei isso no Google, mas ainda tenho problemas em relacionar o que o Django define como "aplicativos".

Devo criar um novo aplicativo para cada funcionalidade em um site, mesmo que use modelos do projeto principal?

Vocês têm um bom princípio básico de quando separar um novo aplicativo e quando manter a funcionalidade junto com o "projeto principal" ou outros aplicativos?

Håkan
fonte

Respostas:

43

James Bennett tem um maravilhoso conjunto de slides sobre como organizar aplicativos reutilizáveis ​​no Django.

Antti Rasinen
fonte
1
Isso significa que, se eu fizer um modelo filho, ele deve estar sempre no mesmo aplicativo? Já que não consigo colocá-lo em outro projeto facilmente sem trazer dois "aplicativos"
Lionel
18

Eu prefiro pensar nos aplicativos Django como módulos ou componentes reutilizáveis ​​do que como "aplicativos".

Isso me ajuda a encapsular e desacoplar certos recursos uns dos outros, melhorando a capacidade de reutilização caso decida compartilhar um determinado "aplicativo" com a comunidade em geral e a facilidade de manutenção.

Minha abordagem geral é agrupar recursos específicos ou conjuntos de recursos em "aplicativos", como se eu fosse lançá-los publicamente. A parte difícil aqui é descobrir o tamanho de cada balde.

Um bom truque que uso é imaginar como meus aplicativos seriam usados ​​se fossem lançados publicamente. Isso geralmente me incentiva a reduzir os baldes e definir com mais clareza seu "propósito".

blahspam
fonte
16

Aqui está a apresentação atualizada em 6 de setembro de 2008.

DjangoCon 2008: Aplicativos Reutilizáveis ​​@ 7: 53

Slide: Reusable_apps.pdf

Retirado do slide

Deve ser seu próprio aplicativo?

  • É completamente alheio ao foco do aplicativo?
  • É ortogonal a tudo o mais que estou fazendo?
  • Vou precisar de funcionalidade semelhante em outros sites?

Se algum deles for "Sim"? Então, é melhor dividi-lo em um aplicativo separado.

Yeo
fonte
O slide que vi não contém a primeira pergunta sobre o "foco do aplicativo".
johnny
@johnny Está lá no slide 31 de 99.
Yeo
13

Eu tendo a criar novos aplicativos para cada conjunto de modelos logicamente separado. por exemplo:

  • Perfis de usuário
  • Postagens do fórum
  • Postagens no blog
pobk
fonte
6

A regra que sigo é que deve ser um novo aplicativo se eu quiser reutilizar a funcionalidade em um projeto diferente.

Se for necessário um entendimento profundo dos modelos em seu projeto, provavelmente é mais coeso mantê-lo com os modelos.

Ryan
fonte
4

As duas melhores respostas para essa pergunta que encontrei na web são:

  1. A Conversa de Apps Reutilizáveis ​​( slides ) ( vídeo ) também mencionada em outras respostas. Bennett, o autor e contribuidor do Django, publica regularmente aplicativos para outros usarem e tem um forte ponto de vista em relação a muitos aplicativos pequenos.
  2. Dicas de Doordash para Django em escala, que dá o conselho oposto e diz que, no caso deles, eles migraram para um único aplicativo após iniciar com muitos aplicativos separados. Eles tiveram problemas com o gráfico de dependência de migração entre aplicativos.

Ambas as fontes concordam que você deve criar um aplicativo separado nas seguintes situações:

  • Se você planeja reutilizar seu aplicativo em outro projeto Django (especialmente se planeja publicá-lo para outros reutilizarem).
  • Se o aplicativo tem poucas ou nenhuma dependência entre ele e outro aplicativo. Aqui, você pode imaginar um aplicativo sendo executado como seu próprio microsserviço no futuro.
Jonathan Berger
fonte
1

Um 'aplicativo' pode ser muitas coisas diferentes, tudo realmente se resume a gosto. Por exemplo, digamos que você esteja construindo um blog. Seu aplicativo pode ser o blog inteiro ou você pode ter um aplicativo 'admin', um aplicativo 'site' para todas as visualizações públicas, um aplicativo 'rss', um aplicativo de 'serviços' para que os desenvolvedores possam interagir com o blog em seus próprios caminhos, etc.

Eu, pessoalmente, faria do próprio blog o aplicativo e revelaria a funcionalidade dentro dele. O blog pode então ser reutilizado facilmente em outros sites.

O bom do Django é que ele reconhecerá qualquer arquivo models.py em qualquer nível de sua árvore de diretórios como um arquivo contendo modelos Django. Portanto, dividir sua funcionalidade em 'subaplicativos' menores dentro de um 'aplicativo' em si não tornará nada mais difícil.

Willurd
fonte