He buscado en Google esto, pero todavía tengo problemas para relacionarme con lo que Django define como "aplicaciones".
¿Debo crear una nueva aplicación para cada pieza de funcionalidad en un sitio, aunque use modelos del proyecto principal?
¿Tienen una buena regla general sobre cuándo dividir una nueva aplicación y cuándo mantener la funcionalidad junto con el "proyecto principal" u otras aplicaciones?
Prefiero pensar en las aplicaciones de Django como módulos o componentes reutilizables que como "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" en particular con la comunidad en general y la capacidad de mantenimiento.
Mi enfoque general es agrupar funciones específicas o conjuntos de funciones en "aplicaciones" como si fuera a publicarlas. 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 publicadas. Esto a menudo me anima a reducir los cubos y definir más claramente su "propósito".
fuente
Aquí está la presentación actualizada el 6 de septiembre de 2008.
DjangoCon 2008: Aplicaciones reutilizables a las 7:53
Diapositiva: Reusable_apps.pdf
fuente
Tiendo a crear nuevas aplicaciones para cada conjunto de modelos lógicamente separados. p.ej:
fuente
La regla que sigo es que debería ser una nueva aplicación si quiero reutilizar la funcionalidad en un proyecto diferente.
Si necesita una comprensión profunda de los modelos en su proyecto, probablemente sea más cohesivo pegarlo con los modelos.
fuente
Las dos mejores respuestas a esta pregunta que he encontrado en la web son:
Ambas fuentes están de acuerdo en que debe crear una aplicación separada en las siguientes situaciones:
fuente
Una 'aplicación' puede ser muchas cosas diferentes, todo se reduce al gusto. Por ejemplo, digamos que está creando un blog. Su aplicación podría ser el blog completo, o podría tener una aplicación de 'administración', una aplicación de 'sitio' para todas las vistas públicas, una aplicación de 'rss', una aplicación de 'servicios' para que los desarrolladores puedan interactuar con el blog en su propios caminos, etc.
Personalmente, convertiría el blog en la aplicación y desglosaría la funcionalidad dentro de él. El blog podría 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 contiene modelos Django. Por lo tanto, dividir su funcionalidad en 'subaplicaciones' más pequeñas dentro de una 'aplicación' en sí no hará nada más difícil.
fuente