¿Pueden los modelos de dominio en la base de datos ser una solución sostenible?

13

Recién comencé en un nuevo trabajo como desarrollador de bases de datos para una empresa mediana y pequeña basada en la tecnología de Microsoft. Al principio noté cuántas prácticas se desvían de lo que me han enseñado en la escuela con respecto a las mejores prácticas, patrones de diseño, pruebas y gestión de proyectos.

¡Lo que más me molesta es cómo nuestro desarrollador principal de bases de datos (en adelante llamado "John") mantiene el esquema del modelo en la base de datos! Hacemos esto al tener 3 mesas "mágicas"; uno para esquemas de bases de datos, uno para tablas y otro para columnas.

Insertar un registro en la tabla " Tablas " genera (a través de un desencadenador de base de datos), la tabla real correspondiente. Insertar una fila en la tabla " Filas " actualiza la tabla referenciada con esa fila. A su vez, estos son leídos por su programa casero C # para generar modelos C #, que son utilizados por los desarrolladores frontend para controladores y externos.

Aparte de esto, la mayor parte del desarrollo se realiza de acuerdo con el marco ASP.NET MVC .

Veo un par de fallas con este enfoque:

  • Lo necesitamos para mantener el ORM, y rara vez tiene tiempo para hacerlo (¡la seguridad laboral es buena!)
  • Los disparadores The para las tablas "Tablas" y "Filas" tienen fallas. No admiten actualizaciones de tablas, ni restricciones de comprobación ni funciones más "avanzadas". Si bien seguramente podríamos mejorarlos, todavía no estoy seguro de si este es el camino a seguir.
  • Mantener la lógica programática en la base de datos se siente extraño y restrictivo (aunque es posible extender sus modelos a través de C #).
  • Su generador de modelos C # debe ser ejecutado manualmente por una de las 3 personas (entre las cuales soy una), y aún no es lo suficientemente maduro como para ser incluido en un proceso de construcción automatizado.

Varias personas han sugerido la introducción gradual de un producto probado y verdadero como Entity Framework , pero él lo rechaza y afirma que mantener la lógica empresarial en la capa de código solo es adecuado para aplicaciones de pequeña escala y proyectos de arranque para nuevas empresas.

Esta publicación está conduciendo a algo que podría parecer una discusión obvia, pero esa no es mi intención. Solo quiero algunas aclaraciones sobre nuestro enfoque arquitectónico.

¿Mantener los modelos de dominio en la base de datos puede ser una solución sostenible para una empresa en crecimiento?

krystah
fuente
Los modelos de dominio están estrechamente vinculados al diseño impulsado por dominio. El objetivo principal del diseño dirigido por dominio es estar libre del diseño dirigido por datos, donde los datos (es decir, la base de datos) son el núcleo de la aplicación. Dicho enfoque y modelos de dominio no van realmente juntos. Cuando desarrolle siguiendo las prácticas de diseño impulsadas por el dominio, no le importa de dónde provienen los datos, simplemente los usa y ejecuta la lógica en su capa empresarial.
Andy
No estoy muy claro qué quiere decir con "mantener la lógica programática en la base de datos". ¿Puedes aclarar eso?
Robert Harvey
La lógica empresarial en el código es exactamente la forma correcta. El db debe ser un almacén de datos tonto, nada más.
Andy
@ Andy, supongo que esto depende. Puede ser que su DBA sea el centro del equipo y él mantenga toda la lógica de negocios en la base de datos, que luego se consulta mediante llamadas de proceso almacenadas tontas, extrae datos en POCO, etc. Este es un enfoque cuestionable, pero conozco equipos, manteniendo la mayor parte de la lógica de negocios. si no todo en DB.
Vladislav Rastrusny
@VladislavRastrusny Cualquiera sea la razón, mantener la lógica de negocios en la base de datos es un diseño extremadamente pobre.
Andy

Respuestas:

16

Estás describiendo una plataforma interna.

El problema con las plataformas internas es que reinventa todos los mecanismos de una plataforma o tecnología (en este caso, una base de datos relacional) que se han perfeccionado y perfeccionado durante décadas de evolución y esfuerzo, pero reinventándolo mal. Estás pasando por alto todas las optimizaciones que están disponibles para aquellos que eligen un diseño más convencional, y cambias la simplicidad y la elegancia inicial por la complejidad y las dificultades futuras.

Dicho esto, si el producto final de este proceso son tablas reales y clases reales que modelan objetos de dominio empresarial reales , no veo mucho daño en este enfoque, aparte de la inmadurez de las herramientas. Stack Exchange en realidad usa su propio ORM de cosecha propia, y eso parece haber funcionado para ellos. Entonces sé que este tipo de enfoques de "cabaña" pueden funcionar.

Tenga en cuenta que la mayoría de los ORM que toman el enfoque de "tabla primero" simplemente miran la estructura de la tabla en la base de datos para crear las clases. Las tablas "tabla" y "fila" que ha creado su amigo son meramente metadatos que ya existen en las tablas del sistema de la mayoría de los sistemas de bases de datos relacionales modernos.

Lecturas adicionales
El proyecto "Visión", una historia de advertencia sobre el efecto de la plataforma interna
(puede omitir el preámbulo y comenzar a leer en el subtítulo "Presentación de la visión")

Robert Harvey
fuente
2
Lectura interesante, definitivamente podría dibujar anologías. Todavía soy nuevo y seguiré siendo un espectador por ahora, pero definitivamente lo mantendré bajo la lente. Gracias por una buena respuesta!
krystah