J'ai cherché sur Google, mais j'ai toujours du mal à comprendre ce que Django définit comme des "applications".
Devrais-je créer une nouvelle application pour chaque fonctionnalité d'un site, même s'il utilise des modèles du projet principal?
Avez-vous une bonne idée du moment de scinder une nouvelle application et de conserver les fonctionnalités avec le "projet principal" ou d'autres applications?
James Bennett a un magnifique ensemble de diapositives sur la manière d’organiser des applications réutilisables dans Django.
Je préfère considérer les applications Django comme des modules ou des composants réutilisables que comme des "applications".
Cela me permet d'encapsuler et de découpler certaines fonctionnalités les unes des autres, ce qui améliore la capacité de réutilisation si je décidais de partager une "application" particulière avec l'ensemble de la communauté, ainsi que sa maintenabilité.
Mon approche générale consiste à regrouper des fonctionnalités ou des ensembles de fonctionnalités spécifiques dans des "applications", comme si je les publiais publiquement. La partie difficile ici consiste à déterminer la taille de chaque seau.
Un bon truc que j'utilise est d'imaginer comment mes applications seraient utilisées si elles étaient publiées. Cela m'encourage souvent à rétrécir les compartiments et à définir plus clairement son "objectif".
J'ai tendance à créer de nouvelles applications pour chaque ensemble de modèles logiquement séparé. par exemple.:
Voici la présentation mise à jour du 6 septembre 2008.
DjangoCon 2008: Applications réutilisables à 7h53
Diapositive: Reusable_apps.pdf
Tiré de la diapositive
Cela devrait-il être sa propre application?
- Est-ce que cela n'a aucun rapport avec le focus de l'application?
- Est-ce orthogonal à tout ce que je fais?
- Aurai-je besoin de fonctionnalités similaires sur d'autres sites?
Si l'un d'entre eux est "Oui"? Alors mieux vaut le casser en un application séparée.
La règle que je suis est que cela devrait être une nouvelle application si je veux réutiliser les fonctionnalités dans un projet différent.
Si cela nécessite une compréhension approfondie des modèles de votre projet, il est probablement plus cohérent de le coller avec les modèles.
Une «application» peut être composée de nombreuses choses différentes. Tout se résume vraiment au goût. Par exemple, supposons que vous construisez un blog. Votre application peut être le blog entier, ou vous pouvez avoir une application "admin", une application "site" pour toutes les vues publiques, une application "rss", une application "services" afin que les développeurs puissent se connecter au blog dans leur propres moyens, etc.
Personnellement, je ferais du blog l'app elle-même et j'exploiterais ses fonctionnalités. Le blog pourrait ensuite être réutilisé assez facilement sur d'autres sites Web.
Le bon côté de Django est qu’il reconnaîtra tout fichier models.py, quel que soit le niveau de votre arborescence de répertoires, en tant que fichier contenant des modèles Django. Donc, briser vos fonctionnalités en petites "sous-applications" au sein d'une "application" elle-même ne rendra rien de plus difficile.
Les deux meilleures réponses à cette question que j'ai trouvée sur le Web sont les suivantes:
Les deux sources conviennent que vous devez créer une application distincte dans les situations suivantes: