2011-07-07 13 views
5

Otra pregunta de mejores prácticas para aquellos con experiencia: ¿Cuántos modelos colocan en un archivo?Mejor práctica de Django: número de clases de modelo por estructura de archivo/directorio

He visto muchos ejemplos que incluyen todas las clases de modelos en un solo archivo "models.py", lo cual realmente me parece incorrecto. En proyectos anteriores usando otras pilas, he ido con un archivo por clase de modelo. ¿Cómo se hace correctamente en Django para aplicaciones no triviales con, digamos, 20 clases de modelo? ¿Cómo se vería la estructura del directorio?

+0

¿Por qué tendría siquiera 20 modelos en una aplicación en primer lugar? –

+0

De hecho. Gracias. Serían múltiples aplicaciones dentro del proyecto/sitio. Supongo que eso es lo que quise decir cuando pregunté sobre la estructura del directorio. – Withnail

+0

Consulte mi respuesta a continuación, pero si pregunta por la estructura del directorio, asígneles el nombre * de lo que hacen. * ¿Qué representan? ¿Qué API exponen a otras aplicaciones? –

Respuesta

11

Muchas personas, especialmente las que provienen del mundo de los rieles, se cuelgan del término "aplicación" y comienzan a incluir absolutamente todo en una sola aplicación. En Django, una aplicación es un módulo de uso único que hace una cosa y lo hace bien. Cada aplicación debe describirse en una o dos oraciones cortas. Un "proyecto" es una colección de aplicaciones unificadas por un archivo de configuraciones. Incluso para algo tan complicado como una tienda en línea, algo que estoy descubriendo ahora, tener más de cuatro o cinco modelos en una sola aplicación es una señal de advertencia: era mejor que la aplicación store (que tiene el carrito de compras) dependa de en la aplicación product que ambos en la misma aplicación. Lo mismo ocurrió con invoices y payments, y así sucesivamente.

Eche un vistazo a Django in the Real World, la presentación de Jacob Kaplan-Moss sobre cómo escribir aplicaciones de Django.

Una aplicación Django es encapsulación: describe un objeto simple (o colección de objetos) y su API. Tener 20 modelos parece que no tienes una API limpia y, por lo tanto, un concepto claro de lo que hace esta aplicación.

La respuesta que desea es "depende de lo que haga su aplicación". Con ese fin, ¿qué demonios hace una aplicación con 20 modelos do, de todos modos? Tome su copia de Refactoring y diviértase.

+0

Gracias tanto a usted como a Ignacio por señalar el error en mi redacción de la pregunta. ¿Tiene usted, entonces, estos cuatro o cinco modelos en el archivo models.py de cada aplicación? – Withnail

+0

Sí, generalmente. Representan un solo pensamiento coherente. Creo que la aplicación más complicada que he hecho fue la biblioteca de una compañía de cine: película, participante (actor, director, escritor, etc.), festivales, premios, todos relacionados con la película. Pude haberlas dividido en aplicaciones individuales, y usé el administrador de relaciones de Django para ponerlas a disposición de las plantillas, supongo. Pero fueron cuatro modelos, en total. La idea es que todos ellos formen un pensamiento coherente: "Una película y sus metadatos". O lo que sea. "Carritos de compras en una tienda". "Historias con escenas, escenas, personajes y configuraciones". Una idea por aplicación –

+0

Hmm. Tal vez estoy sobre normalizando para Django? – Withnail

Cuestiones relacionadas