知识卡片

函数范式天然适合表达领域事件

普通读书笔记卡 · 1979.ad

内容

函数建模范式仍可表示实体与值对象(皆不变,区别主要在是否需要唯一标识符),聚合概念同样存在(Scala 中常为聚合定义满足角色特征的 trait,用混入多个 trait 完成 ADT 组合);资源库会与外部资源协作、产生副作用,故遵循 FP 会把它推向纯函数外部(用柯里化或 Reader Monad 推迟注入具体实现)。更重要的是:ADT 的不变性与对模式匹配的支持使其天生适合表达领域事件(用积类型表示单个事件、用和类型抽象事件族并在 handle 中模式匹配)。因此函数建模范式可很好地与领域事件结合,以领域事件作为模型驱动设计的驱动力,配合事件风暴识别事件、状态机表达业务流程(状态迁移即命令对事件的触发)。发散:做事件驱动/事件溯源时,函数范式的不变 ADT + 模式匹配往往比可变对象更契合。

参考来源

- 位置:《解构领域驱动设计》附录A A.3.3(源文件:_epub-src/OEBPS/034.xhtml) - 结论依据:原文说明函数范式如何表示实体/值对象/聚合/资源库,并指出 ADT 天然适合表达领域事件、可与事件驱动结合。 - 原始内容:根据代数数据类型的不变性以及对模式匹配的支持,它还天生适合表达领域事件……以领域事件作为模型驱动设计的驱动力。