it-swarm-es.tech

¿Cuándo crear una nueva aplicación (con startapp) en Django?

He buscado en Google para esto, pero todavía tengo problemas relacionados con lo que Django define como "aplicaciones".

¿Debo crear una nueva aplicación para cada pieza de funcionalidad en un sitio, a pesar de que utiliza modelos del proyecto principal?

¿Tienen una buena regla general sobre cuándo separar una nueva aplicación y cuándo mantener la funcionalidad junto con el "proyecto principal" u otras aplicaciones?

85
Håkan

James Bennett tiene un maravilloso conjunto de diapositivas sobre cómo organizar aplicaciones reutilizables en Django.

40
Antti Rasinen

Prefiero pensar en las aplicaciones de Django como módulos o componentes reutilizables que en "aplicaciones".

Esto me ayuda a encapsular y desacoplar ciertas características entre sí, mejorando la capacidad de reutilización en caso de que decida compartir una "aplicación" particular con la comunidad en general y la capacidad de mantenimiento.

Mi enfoque general es agrupar características específicas o conjuntos de características en "aplicaciones" como si fuera a lanzarlas públicamente. La parte difícil aquí es averiguar qué tan grande es cada cubo.

Un buen truco que utilizo es imaginar cómo se usarían mis aplicaciones si fueran lanzadas públicamente. Esto a menudo me anima a reducir los cubos y definir más claramente su "propósito".

18
blahspam

Aquí está la presentación actualizada el 6 de septiembre de 2008.

DjangoCon 2008: Aplicaciones reutilizables @ 7: 5

Diapositiva: Reusable_apps.pdf

Tomado de la diapositiva

¿Debería ser esta su propia aplicación?

  • ¿Es completamente ajeno al enfoque de la aplicación?
  • ¿Es ortogonal a cualquier otra cosa que esté haciendo?
  • ¿Necesitaré una funcionalidad similar en otros sitios?

Si alguno de ellos es "Sí"? Entonces mejor descomponerlo en una aplicación separada.

12
Yeo

Tiendo a crear nuevas aplicaciones para cada conjunto de modelos lógicamente separados. p.ej.:

  • Perfiles de usuario
  • Publicaciones en el foro
  • Publicaciones de blog
11
pobk

La regla que sigo es que debería ser una aplicación nueva si quiero reutilizar la funcionalidad en un proyecto diferente.

Si necesita una comprensión profunda de los modelos de su proyecto, probablemente sea más coherente que se adhiera a los modelos.

5
Ryan

Una 'aplicación' puede ser muchas cosas diferentes, todo se reduce a gusto. Por ejemplo, digamos que estás construyendo un blog. Su aplicación podría ser el blog completo, o podría tener una aplicación 'admin', una aplicación 'site' para todas las vistas públicas, una aplicación 'rss', una aplicación 'services' para que los desarrolladores puedan interactuar con el blog en sus aplicaciones. caminos propios, etc.

Personalmente haría que el blog en sí fuera la aplicación, y rompería la funcionalidad dentro de él. El blog podría luego reutilizarse con bastante facilidad en otros sitios web.

Lo bueno de Django es que reconocerá cualquier archivo models.py dentro de cualquier nivel de su árbol de directorios como un archivo que contenga modelos Django. Por lo tanto, dividir su funcionalidad en 'sub aplicaciones' más pequeñas dentro de una 'aplicación' en sí misma no dificultará nada.

1
willurd

Las dos mejores respuestas a esta pregunta que he encontrado en la web son:

  1. Las aplicaciones reutilizables Talk ( diapositivas ) ( video ) también se mencionan en otras respuestas. Bennett, el autor y colaborador de Django, publica regularmente aplicaciones para que otros las usen y tiene un fuerte punto de vista hacia muchas aplicaciones pequeñas.
  2. Los Consejos de Doordash para Django en Escala que da el consejo opuesto y dice que en su caso migraron a una sola aplicación después de comenzar con muchas aplicaciones separadas. Se encontraron con problemas con el gráfico de dependencia de migración entre aplicaciones.

Ambas fuentes acuerdan que debe crear una aplicación separada en las siguientes situaciones:

  • Si planea reutilizar su aplicación en otro proyecto de Django (especialmente si planea publicarla para que otros la reutilicen).
  • Si la aplicación tiene pocas o ninguna dependencia entre ella y otra aplicación. Aquí puede imaginar una aplicación ejecutándose como su propio microservicio en el futuro.
1
Jonathan Berger