Wann erstelle ich eine neue App (mit startapp) in Django?


102

Ich habe dafür gegoogelt, aber ich habe immer noch Probleme damit, was Django als "Apps" definiert.

Sollte ich für jede Funktionalität einer Site eine neue App erstellen, obwohl Modelle aus dem Hauptprojekt verwendet werden?

Habt ihr eine gute Faustregel, wann eine neue App abgespalten werden soll und wann die Funktionalität zusammen mit dem "Hauptprojekt" oder anderen Apps erhalten bleiben soll?

Antworten:


43

James Bennett hat eine wunderbare Reihe von Folien zum Organisieren wiederverwendbarer Apps in Django.


1
Bedeutet das, wenn ich ein Kindermodell mache, muss es immer in derselben App sein? Da ich es nicht einfach in ein anderes Projekt einfügen kann, ohne zwei "Apps" zu bringen
Lionel

18

Ich stelle mir Django-Anwendungen lieber als wiederverwendbare Module oder Komponenten als als "Anwendungen" vor.

Dies hilft mir, bestimmte Funktionen zu kapseln und voneinander zu entkoppeln, und verbessert die Wiederverwendbarkeit, falls ich mich entscheide, eine bestimmte "App" für die gesamte Community freizugeben, sowie die Wartbarkeit.

Mein allgemeiner Ansatz besteht darin, bestimmte Funktionen oder Funktionssätze in "Apps" zu integrieren, als würde ich sie öffentlich veröffentlichen. Der schwierige Teil hier ist herauszufinden, wie groß jeder Eimer ist.

Ein guter Trick, den ich benutze, ist sich vorzustellen, wie meine Apps verwendet würden, wenn sie öffentlich veröffentlicht würden. Dies ermutigt mich oft, die Eimer zu verkleinern und ihren "Zweck" klarer zu definieren.


16

Hier ist die aktualisierte Präsentation am 6. September 2008.

DjangoCon 2008: Wiederverwendbare Apps @ 7: 53

Folie: Reusable_apps.pdf

Entnommen von der Folie

Sollte dies eine eigene Anwendung sein?

  • Hat es nichts mit dem Fokus der App zu tun?
  • Ist es orthogonal zu dem, was ich sonst noch mache?
  • Benötige ich ähnliche Funktionen auf anderen Websites?

Wenn einer von ihnen "Ja" ist? Dann am besten in eine separate Anwendung aufteilen.


Die Folie, die ich gesehen habe, enthält nicht die erste Frage zum "Fokus der App".
Johnny

@ Johnny Es ist da auf Folie 31 von 99.
Yeo

13

Ich neige dazu, neue Anwendungen für jeden logisch getrennten Satz von Modellen zu erstellen. z.B:

  • Benutzerprofil
  • Forenbeiträge
  • Blogeinträge

6

Die Regel, der ich folge, ist, dass es eine neue App sein sollte, wenn ich die Funktionalität in einem anderen Projekt wiederverwenden möchte.

Wenn es ein tiefes Verständnis der Modelle in Ihrem Projekt erfordert, ist es wahrscheinlich kohärenter, es an den Modellen festzuhalten.


3

Die zwei besten Antworten auf diese Frage, die ich im Internet gefunden habe, sind:

  1. Der Reusable Apps Talk ( Folien ) ( Video ) wird auch in anderen Antworten erwähnt. Bennett, der Autor und Django-Mitwirkende, veröffentlicht regelmäßig Apps, die andere verwenden können, und hat einen starken Standpunkt zu vielen kleinen Apps.
  2. Doordashs Tipps für Django at Scale, die den gegenteiligen Rat geben und besagen, dass sie in ihrem Fall auf eine einzelne App migriert sind, nachdem sie mit vielen separaten Apps begonnen haben. Sie hatten Probleme mit dem Migrationsabhängigkeitsdiagramm zwischen Apps.

Beide Quellen sind sich einig, dass Sie in den folgenden Situationen eine separate App erstellen sollten:

  • Wenn Sie vorhaben, Ihre App in einem anderen Django-Projekt wiederzuverwenden (insbesondere, wenn Sie sie veröffentlichen möchten, damit andere sie wiederverwenden können).
  • Wenn die App nur wenige oder keine Abhängigkeiten zwischen ihr und einer anderen App aufweist. Hier können Sie sich möglicherweise vorstellen, dass eine App in Zukunft als eigener Microservice ausgeführt wird.

1

Eine 'App' kann viele verschiedene Dinge sein, es kommt wirklich auf den Geschmack an. Angenommen, Sie erstellen ein Blog. Ihre App kann das gesamte Blog sein, oder Sie können eine 'Admin'-App, eine' Site'-App für alle öffentlichen Ansichten, eine 'RSS'-App, eine' Services'-App haben, damit Entwickler mit dem Blog in ihrem Blog kommunizieren können eigene Wege usw.

Ich persönlich würde den Blog selbst zur App machen und die darin enthaltenen Funktionen aufteilen. Der Blog könnte dann ziemlich einfach auf anderen Websites wiederverwendet werden.

Das Schöne an Django ist, dass es jede Datei models.py in jeder Ebene Ihres Verzeichnisbaums als Datei mit Django-Modellen erkennt. Die Aufteilung Ihrer Funktionalität in kleinere "Unter-Apps" innerhalb einer "App" selbst wird also nichts schwieriger machen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.