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.
- ¿Cuáles son las oportunidades de crecimiento para un desarrollador de back-end en Times Internet Limited?
- ¿Cómo es trabajar en OPOWER?
- Si no voy a una escuela superior, ¿debería hacer ingeniería informática en lugar de ciencias de la computación para ser competitivo para las oportunidades de trabajo de software?
- ¿Cómo se pueden rastrear múltiples aspectos al ejecutar un proyecto grande?
- ¿Crees que la cobertura del mercado de código abierto es una bendición o una maldición para la industria del software? ¿Por qué?
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?