Pregunta

Acabo de leer el artículo de Wiki (alemán) sobre el desarrollo de software basado en modelos (MDSD).Resumiendo la Definición Wiki:

  • MDSD se trata del principio DRY (no se repita)
  • MDSD trata sobre el diseño de DSL (lenguajes específicos de dominio) y generadores
  • Una descripción más concisa de los problemas (a través del mayor nivel de abstracción de las respectivas DSL) es posible a través de MDSD.

Como conozco y uso la programación funcional de orden superior, me pregunto, y mi pregunta real es: ¿MDSD no es más que un intento desesperado de inyectar (una parte de) las poderosas características que ofrece la programación funcional de orden superior en los lenguajes / paradigmas de programación que inherentemente carecen de esas características?

(¿O lo entendí mal y podría incluso usarse MDSD para respaldar sustancialmente la programación funcional de orden superior?)

¿Fue útil?

Solución

Prefiero mirarlo al revés. OOP, MDSD, TDD, diseño impulsado por dominios y los muchos otros paradigmas que existen son solo eso ... paradigmas. Son formas de ver la tarea de desarrollo de software que las personas han desarrollado para abordar las cosas que percibieron que faltaban en lo que les precedió. Resulta que la programación funcional hace lo mismo: le da al programador poderes de abstracción que no son elegantes en lenguajes que no tienen funciones de primera clase. Por lo tanto, no diría que MDSD es un intento desesperado de dar características funcionales a los lenguajes no funcionales tanto como diría que es gente que se enfrenta al mismo problema desde una perspectiva diferente.

Algunas de las respuestas a esta pregunta reciente de SO tienen una forma diferente de decirlo . ShreevatsaR dice: "Casi todo lo que puede hacer con macros lo puede hacer con una función de orden superior". Matthias Benkard dice: "La falta de macros se mitiga un poco con conceptos más elaborados ... como mónadas y flechas". Otros comentarios también se hacen eco del mismo tema. Mencionas que uno de los principios de MDSD son los generadores. Las macros son generadores de tiempo de compilación. Así que traduciría sus declaraciones como un argumento de que MDSD es intrínsecamente fácil en lenguajes funcionales.

Otros consejos

Hay una diferencia importante entre la fabricación de un dsl (idioma específico de dominio) (FP) y creando un montón de objetos de dominio (OOP) (con lógica de negocios dentro los objetos).

FP puede sufrir el mismo problema (y ventajas) que los idiomas de procedimiento hacen: Separación de comportamiento y datos . Las lenguas OOP desalientan esto. Esta separación se conoce como la modelo de dominio anémico .

Esta "separación" puede hacer que cambie sus datos muy difíciles (y quizás incluso peor con un DSL) vea mi publicación: Manejo de cambios de modelado de datos incrementales en la programación funcional

Sin embargo, en el comportamiento del cambio del lado del volteo y tiene las cosas sin estado a través del tablero, el dolor en el trasero con un diseño accionado por dominio OOP. Sin embargo, con cosas como aop itd's , y meta-programación esto se vuelve menos de un problema.

Scala y Ruby son un buen ejemplo de una mezcla de ambas técnicas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top