2010-09-22 7 views
9

Otros carteles han dicho anteriormente en este foro que cuando su aplicación Django comienza a ser grande e inmanejable, debe dividirla en varias aplicaciones. Estoy en ese punto ahora. ¿Cuáles son las mejores prácticas para permitir la comunicación entre estas aplicaciones?¿Cómo se deben comunicar varias aplicaciones de Django entre ellas?

Una de mis aplicaciones (llamémoslo Procesador) procesa conjuntos de datos muy grandes. Una vez por hora produce una pequeña cantidad de datos nuevos para la otra aplicación. Esta otra aplicación (llamémoslo Presenter) muestra los datos a los usuarios.

¿Cómo debe el procesador entregar datos nuevos al presentador? ¿Debería simplemente importar partes del modelo de Presenter, para que pueda crear y guardar registros en la base de datos de Presenter? Eso me parece un acoplamiento estrecho. ¿O debería pasar los datos llamando a una función en Presenter? ¿O poner los datos en algún tipo de almacén de datos que conozcan tanto el procesador como el presentador?

¿Cómo resuelven usualmente este problema?

/Martin

Respuesta

4

Sin duda para los modelos del procesador importador de la aplicación del presentador. Así es como, por ejemplo, puede agregar información de usuario adicional: tiene un modelo UserPreferences con ForeignKeyField a django.contrib.auth.models.User. Puede que tengas menos malas sensaciones al hacer eso entre tus dos aplicaciones porque django.contrib es la "biblioteca estándar", pero, no obstante, es un acoplamiento directo.

Si sus aplicaciones están acopladas, entonces su código debe estar acoplado para reflejar esto. Esto sigue la idea de que lo explícito es mejor que lo implícito, ¿verdad?

Sin embargo, si tu estás diseñando algo un poco más genérico (es decir, que va a utilizar varias instancias de aplicaciones Presentador de Procesadores de distintos tipos), puede almacenar los modelos específicos como escenario:

import processor_x.models 
PRESENTER_PROCESSOR_MODELS = presenter_x.models 

Luego, en sus modelos del presentador:

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

Advertencia: Nunca he intentado esto, pero no recuerdo una limitación de la configuración a ser cadenas únicas, tuplas o listas!

+0

"explícita es mejor que implícita" - buen punto, eso me hace sentir mejor sobre la importación de parte del modelo de Presenter en la aplicación del procesador. –

Cuestiones relacionadas