Quando creare una nuova app (con startapp) in Django?


102

Ho cercato su Google per questo, ma ho ancora problemi con ciò che Django definisce "app".

Devo creare una nuova app per ogni funzionalità di un sito, anche se utilizza modelli del progetto principale?

Ragazzi, avete una buona regola pratica su quando separare una nuova app e quando mantenere le funzionalità insieme al "progetto principale" o ad altre app?

Risposte:


43

James Bennett ha una meravigliosa serie di diapositive su come organizzare le app riutilizzabili in Django.


1
Ciò significa che, se creo un modello figlio, deve essere sempre nella stessa app? Dal momento che non posso inserirla facilmente in un altro progetto senza portare più di due "app"
Lionel

18

Preferisco pensare alle applicazioni Django come moduli o componenti riutilizzabili che come "applicazioni".

Questo mi aiuta a incapsulare e disaccoppiare alcune funzionalità l'una dall'altra, migliorando la riusabilità se dovessi decidere di condividere una particolare "app" con la comunità in generale e la manutenibilità.

Il mio approccio generale consiste nel raggruppare funzionalità o set di funzionalità specifici in "app" come se volessi rilasciarli pubblicamente. La parte difficile qui è capire quanto è grande ogni secchio.

Un buon trucco che uso è immaginare come verrebbero utilizzate le mie app se venissero rilasciate pubblicamente. Questo spesso mi incoraggia a ridurre i tempi e definire più chiaramente il suo "scopo".


16

Ecco la presentazione aggiornata il 6 settembre 2008.

DjangoCon 2008: App riutilizzabili @ 7:53

Diapositiva: Reusable_apps.pdf

Preso dalla diapositiva

Questa dovrebbe essere la sua applicazione?

  • È completamente estraneo al focus dell'app?
  • È ortogonale a qualunque altra cosa stia facendo?
  • Avrò bisogno di funzionalità simili su altri siti?

Se qualcuno di loro è "Sì"? Quindi è meglio suddividerlo in un'applicazione separata.


La diapositiva che ho visto non contiene la prima domanda sul "focus dell'app".
johnny

@johnny È lì alla diapositiva 31 di 99.
Yeo

13

Tendo a creare nuove applicazioni per ogni set di modelli logicamente separato. per esempio:

  • Profili utente
  • Messaggi del forum
  • I post del blog

6

La regola che seguo è che dovrebbe essere una nuova app se voglio riutilizzare la funzionalità in un progetto diverso.

Se ha bisogno di una profonda comprensione dei modelli nel tuo progetto, probabilmente è più coeso attaccarlo ai modelli.


4

Le due migliori risposte a questa domanda che ho trovato in giro per il web sono:

  1. Il discorso sulle app riutilizzabili ( diapositive ) ( video ) menzionato anche in altre risposte. Bennett, l'autore e collaboratore di Django, pubblica regolarmente app che possono essere utilizzate da altri e ha un forte punto di vista nei confronti di molte piccole app.
  2. Doordash's Tips for Django at Scale, che dà il consiglio opposto e dice che nel loro caso sono migrati a una singola app dopo aver iniziato con molte app separate. Hanno riscontrato problemi con il grafico delle dipendenze della migrazione tra le app.

Entrambe le fonti concordano sul fatto che dovresti creare un'app separata nelle seguenti situazioni:

  • Se prevedi di riutilizzare la tua app in un altro progetto Django (soprattutto se prevedi di pubblicarla per farla riutilizzare da altri).
  • Se l'app ha poche o nessuna dipendenza tra essa e un'altra app. Qui potresti essere in grado di immaginare un'app in esecuzione come il proprio microservizio in futuro.

1

Un'app può essere molte cose diverse, tutto dipende dai gusti. Ad esempio, supponiamo che tu stia creando un blog. La tua app potrebbe essere l'intero blog, oppure potresti avere un'app "amministratore", un'app "sito" per tutte le visualizzazioni pubbliche, un'app "rss", un'app "servizi" in modo che gli sviluppatori possano interfacciarsi con il blog nel loro modi propri, ecc.

Personalmente, renderei il blog stesso l'app e ne analizzerei le funzionalità. Il blog potrebbe quindi essere riutilizzato piuttosto facilmente in altri siti web.

La cosa bella di Django è che riconoscerà qualsiasi file models.py all'interno di qualsiasi livello dell'albero di directory come un file contenente modelli Django. Quindi suddividere la tua funzionalità in "sotto app" più piccole all'interno di una "app" stessa non renderà nulla di più difficile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.