¿Cuál es el paradigma de modelo de software más utilizado actualmente y por qué?

En estos tiempos modernos [1], el más utilizado es: modelado de información y descomposición funcional .

El modelado de información representa conceptos de dominio (entidades) como construcciones de bases de datos: tablas, columnas, restricciones. En tiempos pasados, era mejor conocido por su artefacto principal: el diagrama entidad-relación. Es común que los objetos representen esas construcciones de bases de datos en un modelo de dominio anémico que admite solo el comportamiento de agregar / editar / eliminar (CRUD), en lugar de un modelo de dominio orientado a objetos que contenga conceptos y restricciones del dominio del problema en consideración. La lógica y las restricciones generalmente se escriben en código de procedimiento (a menudo llamado controladores / gerentes / servicios) envueltos dentro de una transacción en una capa de aplicación / servicio.

La descomposición funcional está dividiendo un problema en partes cada vez más pequeñas, que pueden desarrollarse de forma independiente y luego combinarse en una solución de trabajo. Esas piezas son típicamente procedimientos, subrutinas y módulos cuando se escribe código imperativo (por ejemplo , programación estructurada ) o funciones de transformación en código declarativo (por ejemplo , programación funcional ). Es extremadamente común hoy en día, ver construcciones de lenguaje orientado a objetos (por ejemplo, objetos) utilizados dentro de este enfoque, lo que lleva a muchos programadores a pensar incorrectamente que están haciendo programación orientada a objetos.

Un enfoque orientado a objetos rara vez se usa para modelar un sistema complejo en un modelo de dominio. Particularmente fuera de las aplicaciones Java de grandes empresas. La definición de orientación a objetos como simplemente “usar objetos” se ha vuelto tan generalizada que producir un modelo de dominio de objetos se está convirtiendo en un arte perdido. Los programadores nuevos (y muchos antiguos) generalmente no tienen idea hoy sobre cómo representar sistemas complejos utilizando este enfoque.

Diseño impulsado por dominio

El diseño impulsado por dominio (DDD), como se creó originalmente, es un modelo de dominio orientado a objetos primero, enfoque prescriptivo para implementar un sistema de trabajo en código.

De alguna manera, se ha elevado y torcido para adaptarse a un enfoque de modelado de información, o uno basado en el abastecimiento de eventos. Los profesionales tienden a centrarse por completo en la fontanería técnica, en lugar de modelar el dominio del problema en consideración.

Este alejamiento del uso de un enfoque de modelo de dominio de objetos es particularmente el caso con los proyectos de Microsoft. Microsoft siempre ha promovido un enfoque de modelado de información, y continúa hoy con su producto Entity Framework. Nunca han promovido realmente un modelo de dominio orientado a objetos como una forma de representar la lógica de una aplicación compleja, tal vez porque se han centrado particularmente en una estrategia de generación de código basada en herramientas y capacidad de enlace de datos, una que pueden controlar.

¿Está muerto? Definitivamente no, pero realmente debería describirse mejor hoy como Diseño Dirigido Agregado, o Diseño Dirigido por Eventos, o incluso Diseño Dirigido Reactivo Funcional. El objetivo original ya no se aplica: ” El objetivo del diseño basado en el dominio es crear un mejor software al centrarse en un modelo del dominio en lugar de la tecnología “, Eric Evans, Diseño impulsado por dominio p148.

Diseño impulsado por modelo

Model Driven Design fue particularmente popular a fines de los años 80 y 90 cuando las herramientas de Ingeniería de Software Asistido por Computadora (CASE) buscaban unir y automatizar el diseño y la programación de aplicaciones. No tengo espacio para hablar más aquí, o sobre esfuerzos más recientes como “Software Factories”. Pero basta con decir que en gran medida han caído en desgracia.

[1] Un toque de sarcasmo. Ambos enfoques son viejos.

Algo que escribí hace un tiempo podría ser útil: comprender un enfoque orientado a objetos y alternativas

Consulte también Programación orientada a objetos: ¿por qué los modelos de dominio anémico siguen siendo comunes?

More Interesting

Ingenieros de software: Dada su experiencia en el desarrollo de software, ¿cree que siente más o menos simpatía por los problemas con el despliegue del intercambio de salud que el estadounidense promedio?

¿Cuál es la arquitectura MVC (modelo-vista-controlador) en términos simples?

¿Cuál es el dominio BPM en el desarrollo de software?

¿Cómo funciona el reloj del software en la computadora cuando la computadora está encendida?

¿Qué cambios ocurrirían si Quora fuera de código abierto?

¿Cómo es trabajar con un gerente / líder de equipo indio en una empresa de tecnología en Estados Unidos?

¿Las estimaciones del esfuerzo de prueba también incluyen la reevaluación?

¿Cómo encuentra un buen ingeniero de software un mejor segundo trabajo?

¿Es necesario que un ingeniero informático conozca el desarrollo de aplicaciones?

¿Qué se debe hacer para crear una atmósfera en los colegios / escuelas de la India, para que los estudiantes comiencen a aprender programación desde su primer año de universidad / a una edad temprana?

Cómo escribir un contrato de software

Soy un estudiante de tecnología de la información de una universidad autónoma. ¿Debo comprar una MacBook Air de 13 pulgadas de 128 GB o una pantalla sin retina MacBook Pro de 13 pulgadas?

¿Qué herramientas internas utiliza su casa de software?

¿Cuál es la mejor universidad pública cerca de Warner Robbins AFB para asistir a la maestría en informática / ingeniería de software?

¿Qué compañía elegir entre Credit Suisse o Schlumberger como ingeniero de software?