6

只是阅读关于模型驱动软件开发(MDSD)的(德语)维基文章。总结维基定义:

  • MDSD 是关于 DRY 原则(不要重复自己)
  • MDSD 是关于 DSL(领域特定语言)和生成器的设计
  • 通过 MDSD 可以更简洁地描述问题(通过相应 DSL 的更高抽象级别)。

由于我知道并使用高阶函数式编程,我想知道,我的实际问题是:MDSD 只不过是一次绝望的尝试,将高阶函数式编程提供的强大功能(一部分)注入到本质上缺乏的编程语言/范式中那些特点?

(还是我误解了,MDSD 甚至可以用来实质上支持高阶函数式编程?)

4

2 回答 2

5

我更喜欢反过来看。OOP、MDSD、TDD、领域驱动设计和许多其他的范式都只是……范式。它们是看待人们开发的软件开发任务的方法,以解决他们认为在他们面前的任何东西中缺乏的东西。事实证明,函数式编程做同样的事情——它赋予程序员抽象的能力,这在没有一流函数的语言中并不优雅。所以我不会说 MDSD 是为非函数式语言提供功能特性的绝望尝试,就像我说的是人们从不同的角度来解决同样的问题。

最近这个SO question的一些答案有不同的说法。ShreevatsaR 说,“几乎所有你可以用宏做的事情都可以用高阶函数做”。Matthias Benkard 说:“通过更精细的......像单子和箭头这样的概念,在一定程度上缓解了宏的缺乏。” 其他评论也呼应了同样的主题。您提到 MDSD 的原则之一是生成器。宏是编译时生成器。因此,我会将他们的陈述翻译为一个论点,即 MDSD 在函数式语言中本质上很容易。

于 2011-05-05T13:30:58.460 回答
3

制作DSL(领域特定语言)(FP)和创建一大堆领域对象(OOP)(在对象中包含业务逻辑)之间有一个主要区别。

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

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

然而,另一方面,改变行为并让事情全面无状态是 OOP 域驱动设计的痛点。但是,对于AOP ITD元编程之类的东西,这不再是一个问题。

Scala 和 Ruby 是混合这两种技术的好例子。

于 2011-05-05T13:44:18.767 回答