it-swarm-pt.tech

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

Eu pesquisei por isso, mas ainda tenho problemas relacionados ao que o Django define como "apps".

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

Vocês têm uma boa regra de quando separar um novo aplicativo e quando manter a funcionalidade junto com o "projeto principal" ou outros aplicativos?

79
Håkan

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

39
Antti Rasinen

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

Isso me ajuda a encapsular e desvincular certos recursos uns dos outros, melhorando a reutilização se eu decidir compartilhar um "aplicativo" em particular com a comunidade em geral e a capacidade de manutenção.

Minha abordagem geral é reunir 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 eu uso é imaginar como meus aplicativos seriam usados ​​se fossem lançados publicamente. Isso muitas vezes me encoraja a diminuir os baldes e definir mais claramente seu "propósito".

18
blahspam

Eu tenho a tendência de criar novos aplicativos para cada conjunto logicamente separado de modelos. por exemplo.:

  • Perfis de usuário
  • Posts no Fórum
  • Postagens no blog
11
pobk

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

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

Slide: Reutilizável_apps.pdf

Tirado do slide

Esta deve ser sua própria aplicação?

  • É completamente não relacionado ao foco do aplicativo?
  • É ortogonal para o que mais eu estou fazendo?
  • Vou precisar de funcionalidade semelhante em outros sites?

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

11
Yeo

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

Se precisar de uma compreensão profunda dos modelos em seu projeto, é provavelmente mais coeso aplicá-lo aos modelos.

5
Ryan

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

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

O interessante do Django é que ele reconhecerá qualquer arquivo models.py em qualquer nível da árvore de diretório como um arquivo contendo os modelos do Django. Então, dividir sua funcionalidade em "aplicativos secundários" menores em um "aplicativo" em si não tornará nada mais difícil.

1
willurd

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

  1. O Reutilizável Apps Talk ( slides ) ( video ) também mencionado em outras respostas. Bennett, autor e colaborador do Django, publica regularmente aplicativos para outros usuários e tem um forte ponto de vista em relação a muitos aplicativos pequenos.
  2. Dicas do Doordash para Django em Escala que dá o conselho oposto e diz que no caso deles migraram para um único aplicativo depois de começar 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 do Django (especialmente se você planeja publicá-lo para outras pessoas reutilizarem).
  • Se o aplicativo tiver poucas ou nenhuma dependência entre ele e outro aplicativo. Aqui você pode imaginar um aplicativo em execução como seu próprio microsserviço no futuro.
1
Jonathan Berger