只是阅读关于模型驱动的SW开发(MDSD)的(德国)Wiki文章。总结Wiki定义:

  • mdsd是关于干燥原理(不要重复你自己)
  • MDSD是关于DSL的设计(域特定语言)和生成器
  • 更简洁的问题描述(通过相应DSL的较高抽象级别)可以通过MDSD来实现。

    因为我知道并使用高阶功能编程我想知道,我的实际问题是: 是MDSD,只有绝望的尝试(一部分)强大的功能高阶功能编程提供的编程语言/范式,它固有地缺乏这些功能?

    (或者我是否误解了,也可以使用MDSD来大大支持高阶功能编程?)

有帮助吗?

解决方案

我宁愿换个角度来看它。 OOP,MDSD,TDD,域驱动设计以及许多其他范式就是……范式。它们是看待人们开发的软件开发任务的方法,这些任务是为了解决他们认为比以前更复杂的事情。事实证明,函数式编程具有相同的作用-它赋予程序员抽象的能力,这种能力在没有一流功能的语言中并不优雅。因此,我不会说MDSD是一次绝望的尝试,为非功能语言提供功能特性,就像我说人们从不同的角度来面对相同的问题一样。

这个最近的问题的某些答案有不同的说法。 ShreevatsaR说:“几乎可以使用宏执行的任何事情都可以使用高阶函数进行”。马蒂亚斯·本卡德(Matthias Benkard)说:“宏的缺乏可以通过更精细的……单子和箭头等概念来缓解。”其他评论也呼应相同的主题。您提到MDSD的宗旨之一是生成器。宏是编译时生成器。因此,我可以将他们的陈述解释为MDSD在函数式语言中本来就很容易。

其他提示

制作 DSL (特定于域的语言)(FP)和创建一大堆 Domain Objects (OOP)(内部具有业务逻辑)之间存在主要区别对象)。

FP可能会遇到与程序语言相同的问题(和优点):行为与数据分离。 OOP语言不鼓励这样做。这种分离称为贫血域模型

这种“分离”会使更改数据变得非常困难(对于DSL而言甚至可能更糟),请参阅我的帖子:处理函数式编程中的增量数据建模更改

然而,在另一方面,使用OOP域驱动设计会改变行为并让一切变得无状态,这是痛苦的。但是,使用 AOP ITD 元编程之类的问题就不那么严重了。

Scala和Ruby是这两种技术的完美结合。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top