关于领域建模的最佳书籍


如果有人在我早期的职业生涯中告诉我,我将成为函数式编程的有力倡导者和函数式软件工程基础书籍的作者,我一定会觉得难以相信。

函数式编程真的值得我为之奉献一生吗?

然而,一旦我体验到函数式编程的纯粹之美,就再也无法回头了。

我深入研究了Haskell和函数式C++,并开始写文章、做讲座和开发各种技术。
我意识到,在用函数式语言进行软件工程方面,我拥有一个真正独特的视角,而且为了所有人的利益,有一个重要的知识空白需要填补。

《函数式设计与架构》是一本关于Haskell、Scala、F#和OCaml等函数式语言的软件设计综合指南。本书介绍了一种独特的方法论,即函数声明式设计,它将函数编程的精彩思想与工程推理相结合,形成函数编程的软件工程学科。它涵盖了广泛的主题,包括软件复杂性、特定领域的语言、应用架构、各种函数设计模式和习语、最佳实践、设计原则和方法。

这本实用的书填补了函数式编程领域的空白,提供了一个全面的知识来源和完整的方法论,以轻松和可维护的方式构建现实世界的应用程序。

1、《特定领域的语言》
作者:Martin Fowler

当我第一次踏上我的编程之旅时,那是一段美妙的时光。

我对计算机有一种巨大的力量感,对编程如何改善我和他人的生活有无数的想法。一切似乎都触手可及,在21世纪初,我以极大的热情接近了编程世界。

然而,当我开始深入研究实际的软件开发时,现实就像一场冷水澡一样袭击了我。我很快意识到,这远比写代码更具挑战性。

每一种编程语言和技术都有其隐藏的复杂性和险恶的陷阱。每个领域都充斥着错综复杂的细微差别,在尝试开发软件之前,必须先了解这些差别。我很快发现,没有一种 "完美的解决方案 "是可以普遍适用的。

当我冒险与现实世界的领域合作时,我面临着解决每个企业的复杂需求的艰巨任务。我对这个领域的复杂性感到不知所措,并为有效地驾驭它们而挣扎。

这时,我偶然发现了Fowler的书《特定领域语言》,它完全改变了我的观点。它为解决复杂性、保持代码的理智性以及实施特定领域语言的巨大价值提供了宝贵的见解。

回想起来,我意识到在我熟悉这个正式的概念之前,我已经在我的项目中创建了各种嵌入式特定领域语言(eDSLs)。此外,随着我对函数式编程的热爱,我发现DSL在该范式中发挥了重要作用。

Fowler的书极大地帮助我巩固了我自己的想法和软件设计的方法。

2、《领域建模函数化:用领域驱动设计和F解决软件的复杂性问题
作者:Scott Wlaschin

随着我对函数式编程世界的深入研究,我无法摆脱这样一种感觉,即它是巨大的、深奥的,而且与现实世界有些脱节。

函数式编程似乎是作为它自己的实体存在的,深深地扎根于学术界,与面向对象的编程相比,并不那么实用。凭借我在C++、C和Python等主流语言方面的经验,我拥有一个丰富的工具箱,可以在这些范式中创建高质量的软件。

我学到了各种架构方法、设计模式和软件开发原则,它们大多适用于面向对象的编程,但似乎不太适合于函数式编程。

然而,我开始怀疑这些想法是否真的具有普遍性,以及它们是否可以为函数式编程重新制定。这促使我开始了自己在这一领域的研究,并最终写成了自己的书。

正是在这个探索过程中,我偶然发现了Wlaschin的书,这本书给我带来了启发。它证明了实用的函数式编程和软件工程确实可以共存,并包含了同样的原则、方法和模式。

这本书是我进入实用函数编程领域的一个鼓舞人心的起点,这是我长期以来强烈渴望的东西。

3、《领域驱动设计:应对软件核心中的复杂问题》
作者:Eric Evans

我在软件开发领域的旅程是艰辛而富有挑战性的。

我们都面临的一个共同的挣扎是,现有的解决方案数量太多,使得我们不可能在深层次上完全掌握一切。

就在我认为我已经掌握了一种方法,并觉得自己能够胜任时,一种新的闪亮的方法会出现,要求我立即注意。为了跟上这个不断发展的领域,我常常感觉是一场无休止的竞赛。

作为一名软件工程师,这种不断追求与时俱进的做法可能会让人感到沮丧,因为感觉我们总是落后于这个快速发展的世界。我发现,特定的技术、框架或库的知识并不容易在不同的技术栈中转移。它们太具体了,缺乏普遍性。就在那时,我把注意力转向了更普遍的软件工程原则。

我意识到,有一些基本的工程原则可以应用于不同的技术,使之更容易理解不熟悉的工具和框架。我不再只关注具体的技术,而是开始让自己沉浸在软件工程更广泛和更基础的概念中。

我花了相当长的时间才终于看到了埃文斯的书。我希望我能更早地找到它,因为它能照亮我的道路,避免我在黑暗中徘徊这么久。

4、《函数和反应域建模》
作者:Debasish Ghosh

我是函数式编程的忠实拥护者,也是热情的Haskell爱好者。

具有讽刺意味的是,在我的生活中,曾经有一段时间,我还是一个学生,并认为函数式编程只是一种不切实际的学术追求。

然而,我很快就发现,我在C++中采用的缓解语言固有的不安全性的技术实际上与函数式编程的核心原则是一致的:不可变性、纯洁性和可组合性。

这一认识给我留下了深刻的印象,促使我深入学习Haskell。事实证明,这是一个关键时刻,极大地影响了我的整个职业轨迹。

随着我对函数式编程的深入研究,我发现在面向对象编程领域普遍存在的软件工程实践方面存在重大空白。

根据我在C++和C方面的经验,我注意到在我们对如何使用函数式语言建立强大的应用程序的理解方面存在着许多差距。这种缺陷给函数式编程带来了真正的挑战,也更容易理解为什么它有时会被认为是一种不切实际的努力。

幸运的是,我在发现Ghosh关于函数式语言领域建模的工作和Wlaschin的书中找到了慰藉,这两本书都证明了函数式编程在现实世界的任务中确实是实用和愉快的。

5、《重构:改进现有代码的设计》
作者:Martin Fowler

重构与函数式编程中的领域建模有什么关系?

事实证明,代码改进的本质与提高其处理特定领域复杂问题的能力密切相关。这意味着,即使在我们的代码中重构一个与领域无关的机制时,我们的目标也是为了解决以前无法接触到的领域方面。

重构的另一个重要方面是,由于纯洁性和不可更改性等核心原则,函数式语言使重构更加理想和安全。

虽然可能没有大量的关于函数式编程中领域建模的书籍,但我坚信Fowler的书可以在这方面有巨大的帮助。