模型驱动的软件开发与Haskell

时间:2011-05-05 12:53:42

标签: haskell functional-programming model-driven-development

阅读关于模型驱动的SW-Development(MDSD)的(德国)Wiki文章。总结维基定义:

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

因为我知道并使用高阶函数编程我想知道,我的实际问题是: MDSD是否只是一种绝望的尝试,将高阶函数式编程提供的强大功能(一部分)注入到编程语言/范例中,这本身就缺乏这些功能?

(或者我是否误解了MDSD甚至可以用来支持更高阶的函数式编程?)

2 个答案:

答案 0 :(得分:5)

我更喜欢以相反的方式看待它。 OOP,MDSD,TDD,域驱动设计以及其他许多范例都只是......范例。他们是研究人们开发的软件开发任务的方法,以解决他们认为在他们面前所缺乏的东西。事实证明,函数式编程可以做同样的事情 - 它为程序员提供了抽象的功能,这些功能在没有一流功能的语言中并不优雅。所以我不会说MDSD是一种绝望的尝试,就像我说的那样,人们从不同的角度出现同样的问题时,非常努力地提供非功能性语言的功能。

this最近的SO问题的一些答案有不同的说法。 ShreevatsaR说,“几乎任何你可以使用宏执行高阶函数的宏”。马蒂亚斯·本卡德(Matthias Benkard)说:“通过更复杂的概念,如单子和箭头,可以减轻宏的缺乏。”其他评论也反映了同一主题。你提到MDSD的一个原则是生成器。宏是编译时生成器。因此,我会将他们的陈述翻译成MDSD在函数式语言中本身很容易的论点。

答案 1 :(得分:3)

制作 DSL (域特定语言)(FP)与创建一大堆域对象(OOP)之间存在重大差异(内部具有业务逻辑)对象)。

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

这种“分离”可能会使您的数据变得非常困难(使用DSL可能更糟)请参阅我的帖子:Handling incremental Data Modeling Changes in Functional Programming

然而,在另一方面,改变行为并让所有事情无所事事都是OOP领域驱动设计的痛苦。但是,对于 AOP ITD 元编程这样的问题,这就变得不那么严重了。

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