it-swarm-eu.dev

Wann eine neue App (mit startapp) in Django erstellen?

Ich habe herumgoggeln, aber ich habe immer noch Probleme damit, was Django als "Apps" definiert. 

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

Haben Sie eine gute Faustregel, wann Sie eine neue App abspalten und wann die Funktionalität zusammen mit dem "Hauptprojekt" oder anderen Apps erhalten bleibt?

79
Håkan

James Bennett hat eine wunderbare Reihe von Folien zur Organisation wiederverwendbarer Apps in Django.

39
Antti Rasinen

Ich denke lieber an Django-Anwendungen als wiederverwendbare Module oder Komponenten als an "Anwendungen". 

Dies hilft mir dabei, bestimmte Funktionen zu kapseln und voneinander zu entkoppeln. Wenn ich mich entscheide, eine bestimmte "App" für die Community insgesamt freizugeben, und die Wartbarkeit verbessern.

Mein allgemeiner Ansatz besteht darin, bestimmte Features oder Feature-Sets in "Apps" zusammenzufassen, als ob ich sie öffentlich veröffentlichen würde. Der schwierige Teil hier ist herauszufinden, wie groß jeder Eimer ist. 

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

18
blahspam

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

  • Benutzerprofil
  • Forumsbeiträge
  • Blogeinträge
11
pobk

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

DjangoCon 2008: Wiederverwendbare Apps @ 7: 53

Slide: Reusable_apps.pdf

Aus der Folie genommen

Sollte dies eine eigene Anwendung sein?

  • Ist es völlig unabhängig vom Fokus der App?
  • 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 brechen Sie es am besten in eine separate Anwendung.

11
Yeo

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 Sie ein tiefes Verständnis für die Modelle in Ihrem Projekt benötigen, ist es wahrscheinlich zusammenhängender, wenn Sie sich an die Modelle halten.

5
Ryan

Eine 'App' könnte viele verschiedene Dinge sein, alles hängt wirklich vom Geschmack ab. Angenommen, Sie erstellen ein Blog. Ihre App kann das gesamte Blog sein, oder Sie haben eine "Admin" -App, eine "Site" -App für alle öffentlichen Ansichten, eine "RSS" -App, eine "Services" -App, sodass Entwickler mit dem Blog in ihrem Blog kommunizieren können eigene Wege usw.

Ich persönlich würde das Blog selbst zur App machen und die Funktionalität darin ausbrechen. Der Blog könnte dann auf anderen Websites leicht wiederverwendet werden.

Das Schöne an Django ist, dass es jede models.py-Datei in jeder Ebene Ihres Verzeichnisbaums als Datei erkennt, die Django-Modelle enthält. Wenn Sie also Ihre Funktionalität in kleinere "Unter-Apps" innerhalb einer "App" aufteilen, wird dies nicht schwieriger.

1
willurd

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

  1. Der wiederverwendbare Apps-Talk ( Folien ) ( Video ) wurde auch in anderen Antworten erwähnt. Bennett, der Autor und Django-Mitarbeiter, veröffentlicht regelmäßig Apps, die von anderen verwendet werden können, und hat einen starken Standpunkt gegenüber vielen kleinen Apps.
  2. Doordashs Tipps für Django at Scale die den gegenteiligen Ratschlag gibt und in ihrem Fall besagt, dass sie zu einer einzelnen App migriert wurden, nachdem sie mit vielen separaten Apps begonnen hatten. Sie hatten Probleme mit der Migrationsabhängigkeitsdiagramm zwischen Apps.

Beide Quellen stimmen darin überein, dass Sie in den folgenden Situationen eine separate App erstellen sollten:

  • Wenn Sie beabsichtigen, Ihre App in einem anderen Django-Projekt wiederzuverwenden (insbesondere wenn Sie beabsichtigen, sie für andere Personen zu veröffentlichen)?.
  • Wenn die App wenige oder keine Abhängigkeiten zwischen der App und einer anderen App hat. Hier können Sie sich eine App vorstellen, die in Zukunft als eigener Microservice ausgeführt wird.
1
Jonathan Berger