2010-09-22 20 views
9

Altri posters hanno già detto in questo forum che quando la tua app Django diventa ingombrante e ingestibile, devi dividerla in più app. Sono a quel punto ora. Quali sono le migliori pratiche per consentire la comunicazione tra queste app?In che modo più app Django possono comunicare tra loro?

Una delle mie app (chiamiamola Processore) elabora set di dati molto grandi. Una volta ogni ora produce una piccola quantità di nuovi dati per l'altra app. Quest'altra app (chiamiamola Presenter) mostra i dati agli utenti.

In che modo il processore può inviare nuovi dati a Presenter? Dovrebbe semplicemente importare parti del modello di Presenter, in modo che possa creare e salvare record nel database di Presenter? Mi sembra un accoppiamento stretto. O dovrebbe passare i dati chiamando una funzione in Presenter? O inserire i dati in una sorta di archivio dati di cui sono a conoscenza sia Processor che Presenter?

Come risolvono tutti questi problemi?

/Martin

risposta

4

avrei sicuramente andare per i modelli del processore d'importazione l'applicazione Presenter. Ecco come, ad esempio, puoi aggiungere ulteriori informazioni sull'utente: hai un modello UserPreferences con un ForeignKeyField a django.contrib.auth.models.User. Il tuo potrebbe avere meno cattivi sentimenti di farlo tra le tue due app perché django.contrib è la "libreria standard", ma nonostante ciò è un accoppiamento diretto.

Se le applicazioni sono accoppiate, il codice deve essere accoppiato per riflettere questo. Questo segue l'idea che l'esplicito sia meglio di implicito, giusto?

Se, invece, vi trovate la progettazione di qualcosa di un po 'più generico (ad esempio avete intenzione di utilizzare più istanze Presenter app per i processori di diversi tipi), è possibile memorizzare i modelli specifici come impostazione:

import processor_x.models 
PRESENTER_PROCESSOR_MODELS = presenter_x.models 

Poi, nei modelli Presenter:

from django.conf import settings 
class Presenter: 
    processor = models.ForeignKey(settings.PRESENTER_PROCESSOR_MODELS) 

Caveat: non ho mai tentato, ma non ricordo una limitazione sulle impostazioni di essere solo le stringhe, tuple o elenchi!

+0

"l'esplicito è meglio di quello implicito" - buon punto, questo mi fa sentire meglio sull'importazione di parte del modello di Presenter nell'app Processore. –

Problemi correlati