12

En Django, la arquitectura de software sugerida es poner toda la lógica comercial y el acceso a los datos en los modelos.django models = business logic + data access? ¿O la capa de acceso a datos debe separarse del modelo django?

Pero, algunos colegas han sugerido que la capa de acceso a los datos debe estar separada de la lógica de negocios (capa de servicio de negocios). Su justificación es que la capa de acceso a datos puede aislar los cambios si se usa una fuente de datos diferente. También dicen que hay una lógica de negocios que puede estar en más de un modelo.

Pero cuando comienzo a codificar utilizando las capas de acceso a datos y lógica de negocios, la capa de acceso a datos es simple (básicamente el código del modelo que define el esquema db) y no parece agregar mucho valor.

¿Realmente tiene sentido separar el acceso a los datos de los modelos django o django ya proporciona una capa de acceso a datos suficiente con su ORM?

Estoy buscando desarrolladores que hayan implementado un buen número de aplicaciones django y descubran cuál es su opinión. Esto es para una aplicación web de tamaño pequeño a mediano.

+0

La capa de acceso a datos es el ORM. ** Está ** separado del modelo. No vas a cambiar los de ORM. Usted ** va a cambiar los motores de la base de datos; y eso ya está hecho trivial por la capa ORM. No está claro lo que sus colegas quieren decir con "capa de acceso a datos". ¿Puedes proporcionar más información? –

+0

posible duplicado de [Separación de lógica de negocios y acceso a datos en django] (http://stackoverflow.com/questions/12578908/separation-of-business-logic-and-data-access-in-django) –

+0

@the_drow: OT: ¿puedes dejar de revisar robo y prestar atención a las ediciones? [Esta edición sugerida] (http://stackoverflow.com/review/suggested-edits/3992632) fue un comentario obvio, no una edición sugerida que debería haber sido aceptada. –

Respuesta

24

Después de tres años de desarrollo de Django, aprendí lo siguiente.

El ORM es la capa de acceso. Nada más es necesario

El 50% de la lógica de negocios va en el modelo. Parte de esto se repite o amplifica en las Formas.

20% de la lógica de negocios va en Formularios. Toda validación de datos, por ejemplo, está en los formularios. En algunos casos, los formularios limitarán un dominio general (permitido en el modelo) a algún subconjunto específico del problema, el negocio o la industria.

El 20% de la lógica empresarial termina en otros módulos de la aplicación. Estos módulos están por encima de los modelos y formularios, pero debajo de las funciones de vista, servicios web RESTful y aplicaciones de línea de comandos.

El 10% de la lógica empresarial termina en aplicaciones de línea de comandos que utilizan la interfaz de comando de administración. Esto es cargas de archivos, extractos y cambios aleatorios al por mayor.

Es muy importante que las funciones de vista y los servicios web RESTful no hagan casi nada. Usan modelos, formularios y otros módulos tanto como sea posible. Las funciones de vista y los servicios web RESTful están limitados a lidiar con los caprichos de HTTP y los diversos formatos de datos (JSON, HTML, XML, YAML, lo que sea)

Intentar inventar otra capa de acceso es un ejercicio de valor cero .

+2

algunos detalles excelentes sobre una arquitectura más explícita para django: http://stackoverflow.com/questions/12578908/separation-of-business-logic-and-data-access-in-django?rq=1 – TaiwanGrapefruitTea

+0

No estoy de acuerdo con que el ORM es la capa de acceso a datos; el ORM comprende * la mayoría * de la capa de acceso a datos. El uso de un ORM directamente en los modelos y la asociación de las tablas de la base de datos con los atributos del modelo acopla su aplicación a las bases de datos relacionales y a un ORM específico (por ejemplo, Django). Esto es inherente al patrón de diseño de registro activo, que Django usa (https://docs.djangoproject.com/en/dev/misc/design-philosophies/). Si desea desacoplar la lógica comercial y el acceso a los datos, debe usar el patrón de diseño del correlacionador de datos (por ejemplo, SQLAlchemy ORM lo admite). Sin embargo, eso puede ser excesivo para algunas aplicaciones. –

1

La respuesta depende de los requisitos de su aplicación.

Para las aplicaciones que siempre usarán bases de datos relacionales y se pueden combinar con un ORM específico, no es necesario separar el acceso a los datos y los modelos. Django ORM se basa en el patrón de diseño de registro activo, lo que supone que el acceso a datos y el modelo están juntos. Pro es simplicidad, con es menos flexibilidad.

La separación del acceso a los datos y el modelo solo es necesario cuando el desarrollador desea desacoplar completamente la capa de acceso a los datos y la lógica empresarial. Puedes hacerlo con el patrón de diseño del mapeador de datos. Algunos ORM admiten este patrón de diseño, como SQLAlchemy. Pro es más flexibilidad, con es más complejidad.

Recomiendo el libro "Patrones de arquitectura de aplicaciones empresariales" escrito por Martin Fowler para más detalles.

Cuestiones relacionadas