本章包括
领域模型与领域驱动设计
纯函数式领域模型的优点
响应式建模以提高响应性
函数式如何满足响应式
假设您正在使用大型在线零售商店的门户进行购买操作。在你将想买的商品加入购物车后,购物车却无法注册你的购买操作!这会让你有什么赶脚?或者说你在圣诞节前一周对一件物品进行价格检查,而在过度的延迟之后,你的响应又回来了;你喜欢这种购物体验吗?在这两种情况下,应用程序不具有响应性。第一个例子描述了缺乏对失败情况下的的响应----你的整个购物车都被关闭了因为后端资源是不可用的。第二个例子描述的是对不同负载缺乏响应能力。也许是节日的季节已经给系统带来了过多的负荷,让你的查询反应太慢了。但是这两种情形都会导致用户极度沮丧。
对于我们开发的任何系统而言,核心的概念就是领域模型,它代表着业务是如何工作的。对于一个银行系统,系统的功能包括像banks(银行),accounts(账户),currency(汇率),transaction(交易),和reporting(报告)等的实体,这些实体一起工作,为用户提供良好的银行体验。这是模型的责任,确保用户在使用系统时拥有良好的体验。
当你实现了一个领域模型,您其实是将业务流程转换为软件了。你试着用一种方法使这个转化过程尽可能的像原型的过程一样(其实就是说使得我们的实体的操作可以尽可能的体现现实生活中领域中的实际操作)。为了实现这一点,您需要遵循特定的技术并在设计、开发和实现中采用范例。在本书中,你将会探索如何去使用函数式编程与响应式建模的组合,以交付响应性和可伸缩的模型,并且易于管理和维护。本章介绍了这两种范式的基本概念,并解释这种组合如何协同工作以实现模型的响应性。
如果你现在正在使用该行业目前提供的任何编程技术,设计和实现系统,那么这本书将会使您的眼睛更加灵活和富有表现力地使用新技术。如果你管理开发复杂系统的团队,您将体会到使用功能和响应式编程为客户提供更可靠的软件所带来的好处。本书使用Scala作为实现语言,但是您将学到的基本原理可以应用于当今行业中使用的许多其他语言。
在继续讨论领域建模的核心主题之前,图1.1展示了这一章如何为理解实现域模型的函数式和相应性编程的协同工作提供了基础。这样做的目的是让您熟悉基本概念,这样在本章的最后,您将能够根据函数式和响应性范型来改进您的领域建模技术。