本章以函数和响应性范例开始我们的领域建模之旅。你刚刚了解了两种范式的一些优点。函数式编程基于函数组合:通过将函数组合成语言的一流构件来构建抽象。您可以使用响应性原则使应用程序具有可响应性。以下是这一章的主要内容:
避免在您的模型内共享可变状态---共享的可变状态难以管理,并导致在语义上的不确定性,使并发变得困难。
引用透明----函数式编程为您提供了设计引用透明(纯)模型组件的能力。当你的大多数模型行为都是建立在纯粹的函数基础上的,你就会得到组合性的力量;您可以通过组合构建更大的函数。
有机增长----有了函数设计和思维,你的模型就会有机地成长。因为它是纯的,你的模型可以用数学方法处理,你可以推理它。
专注于核心领域---当您通过使用域驱动设计的原则构建模型时,您就有了实体、值对象和服务,这些服务围绕诸如存储库和工厂之类的模式进行组织。你可以让这些工件都发挥作用。违反纯粹和引用透明原则的原则是例外,但你必须能够证明这样做的理由。可变性使代码的某些部分运行得更快,但同时又难以理解。在您的DDD代码的每一层都要努力实现不可变性----functional meets DDD。
函数使得响应式变得更容易---纯函数是响应式建模的理想候选对象,因为您可以自由地将它们分布在一个并行的环境中,而不需要管理可变的共享状态----functional meets reactive。
针对失败进行设计----在你的模型中,永远不要假设事情不会失败。总是针对失败进行设计,并将故障作为单独的关注点来管理,而不使用业务逻辑代码耦合异常处理程序。
基于事件的建模补充了函数模型---基于事件的编程从模型的“how”中描述了“what”(我知道挺拗口的,附上英文:Event-based programming delineates the “what” from the “how” of your model.)。这也是函数式编程所鼓励的。事件是指定您想要做什么的小消息,事件处理程序则描述了“how”部分。难怪函数式编程和事件驱动编程在一起很好。