用函数式语言做领域驱动设计

  • Jan Stenberg
  • 吴海星

2014 年 3 月 26 日

话题:函数式编程语言 & 开发架构

领域驱动设计 (DDD) 中使用函数式语言 ,在跟业务专家探讨时,真正的代码经常简单得足以取代各种 UML 图, Scott Wlaschin 在最近的函数式伦敦群组集会上讲到了一个用F#做业务建模和函数式编程的真实案例。

Scott,一位.NET 架构师,同时也是掌握函数式编程的作者,他很欣赏函数式编程,但面向对象的开发人员可能会觉得函数式编程很恐怖,接受不了仿函数、应用型、单子之类所有这些奇怪的专业术语,不过 Scott 宣传它们确实只是陌生的术语。对于 Scott 来说,面向对象编程的那些概念也很恐怖,比如多态、泛型、继承、协变等。他认为函数式编程更容易,因为它的概念更少,并且特别强调在他演示的例子中没用到这些概念中的任何一个。

按照 Scott 的经验,很多开发人员都觉得函数式编程擅于解决数学和科学领域中的问题,但对于现实世界中的普通应用来说太复杂了,但他认为 F# 真的很适合做那些无聊的业务类应用程序 (BLOBA) 的开发;它非常精炼,有很多规避套路化代码的便利之处,还有一个确保程序正确性的类型系统。

在领域驱动设计中比较 F# 和 C# 时,可以看看值对象和实体两种代码的例子,Scott 说 F# 的代码通常会简单得多,有时候简单的都可以用来跟领域专家讨论领域模型了,甚至可以直接评审代码,都不用 UML 图或者其他模型。

在介绍 F# 的类型系统时,Scott 展示了如何把类型和用来做类型检查的注解变成领域建模工具,并用来呈现设计。因为编译器会做类型检查,所以类型系统可以被看作是编译时的单元测试。

一个优秀的静态类型系统就像一个编译时单元测试。

Scott 在结论中宣称 F# 是函数优先开发中低风险的、安全的选择,他的主要依据是 F# 有微软在后面撑腰。

原文英文链接:Domain-Driven Design Using a Functional Language

函数式编程语言 & 开发架构