5

Acabo de leer el (alemán) Wiki-Artículo sobre Model-Driven SW-Development (MDSD). Resumiendo la Wiki-Definición:Desarrollo de software impulsado por modelos vs. Haskell

  • DSDM es sobre el DRY-Principio (No repetir ti mismo)
  • DSDM es sobre el diseño de DSL (Lenguajes Específicos de Dominio) y generadores de
  • descripción más concisa de los problemas (a través del nivel más alto de abstracción de las respectivas DSL) es posible a través de MDSD.

Desde que conozco y utilizo de orden superior programación funcional Me pregunto, y mi pregunta real es: hay nada DSDM sino un intento desesperado para inyectar (una parte de) las potentes funciones de programación funcional de orden superior ofrece en ¿lenguajes/paradigmas de programación que carecen inherentemente de esas características?

(O hice me entienda mal y podía DSDM incluso ser utilizado para apoyar sustancialmente la programación funcional de orden superior?)

+1

Sí ;-) (Para su primera pregunta) – jmg

+0

Pregunté algo similar yo mismo: http://stackoverflow.com/questions/2807629/handling-incremental-data-modeling-changes-in-functional-programming y este que cerró (todavía molesto por eso) http://stackoverflow.com/questions/3134825/how-can-you-be-dry-with-a-programming-language-that-doesnt-have-reflection –

Respuesta

5

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

Algunas de las respuestas a this reciente pregunta 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 de alguna manera con conceptos más elaborados ... como mónadas y flechas". Otros comentarios también hacen eco del mismo tema. Usted menciona que uno de los principios de MDSD es generadores. Las macros son generadores de tiempo de compilación. Entonces, traduciría sus declaraciones como un argumento de que el MDSD es inherentemente fácil en los lenguajes funcionales.

3

Hay una gran diferencia entre hacer una DSL (Domain Specific Language) (FP) y la creación de un montón de objetos de dominio (POO) (con la lógica de negocio dentro de los objetos).

FP pueden sufrir el mismo problema (y ventajas) que los lenguajes de procedimiento: Separación de Comportamiento y Datos. Los lenguajes de OOP desalientan esto. Esta separación se conoce como Anemic Domain Model.

Esta "separación" puede hacer el cambio de sus datos muy difícil (y tal vez incluso peor con una conexión DSL) Ver mi post: Handling incremental Data Modeling Changes in Functional Programming

Sin embargo, en el flip comportamiento cambiante lado y tener cosas sin Estado en todos los ámbitos son dolor en el trasero con el diseño OOP Domain Driven. Sin embargo, con cosas como AOP ITD's, y Meta-programación esto se convierte en un problema menor.

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

+0

Al usar DSL, Una forma de facilitar los cambios en los datos es mantener el conocimiento de los datos limitado a un pequeño conjunto de operaciones primitivas e implementar el resto de las operaciones en términos de estas primitivas. A continuación, puede aplicar esto ocultando los datos reales detrás de un tipo opaco (al no exportar los constructores de datos en el caso de Haskell). – hammar

+0

@hammer mientras estoy de acuerdo contigo, el verdadero problema que tengo para crear una DSL es crear la DSL (al menos en Haskell) Me encuentro ** sin enfocar ** en el dominio, sino más bien con las complicadas y pedantes mónadas Haskell, Combinators, Arrows Y qué no. (otra vez solo mi opinión). –

+1

@ Adam Gent: Es una consecuencia de su familiaridad limitada con Haskell, no algo intrínseco. Las personas nuevas en OOP se quejarían de no poder concentrarse en su problema debido a las definiciones de clase complicadas y la herencia, y lo que no. –

Cuestiones relacionadas