Hoy entré en un acalorado debate con otro desarrollador de mi organización sobre dónde y cómo agregar métodos a las clases asignadas a la base de datos. Utilizamos sqlalchemy
, y una parte importante de la base de código existente en nuestros modelos de base de datos es poco más que una bolsa de propiedades asignadas con un nombre de clase, una traducción casi mecánica de tablas de base de datos a objetos de python.
En el argumento, mi posición fue que el valor principal de usar un ORM era que puedes adjuntar comportamientos y algoritmos de bajo nivel a las clases asignadas. Los modelos son las clases primero y, en segundo lugar, persistentes (podrían ser persistentes al usar xml en un sistema de archivos, no es necesario que te importe). Su opinión era que cualquier comportamiento es "lógica de negocios", y que necesariamente pertenece a cualquier otro lugar que no sea el modelo persistente, que debe usarse solo para la persistencia de la base de datos.
Ciertamente, creo que hay una distinción entre lo que es la lógica de negocios , y debería separarse, ya que tiene cierto aislamiento del nivel inferior de cómo se implementa, y la lógica de dominio, que Creo que es la abstracción proporcionada por las clases modelo sobre las que se discutió en el párrafo anterior, pero me está costando saber qué es eso. Tengo una mejor idea de lo que podría ser la API (que, en nuestro caso, es HTTP "ReSTful"), ya que los usuarios invocan la API con lo que quieren hacer , distinto de lo que son permitido y cómo se hace.
tl; dr: ¿Qué tipo de cosas pueden o deberían ir en un método en una clase asignada cuando se usa un ORM, y qué se debe dejar afuera, para vivir en otra capa de abstracción?