知识卡片

代数数据类型:和类型与积类型

普通读书笔记卡 · 1979.w

内容

函数建模范式领域模型的核心要素是代数数据类型(ADT,表达领域概念)与纯函数(表达领域行为),二者皆不变、原子。ADT 通常不含行为,用和类型(sum type,逻辑“或”,用加号表示,如 TimeUnit=Days+Hours+…)展示同一抽象概念的不同组合,用积类型(product type,属性的笛卡儿积,用乘号表示,如 Employee=String*String*String*Date)展示同一概念不同属性的组合。二者不互斥(如 Account 既是和类型又其每个分支是积类型)。ADT 具不变性(Scala case class/object 创建不可变抽象),利于并发与共享。发散:领域里“X 要么是 A 要么是 B 要么是 C”用和类型,“X 由这几个属性构成”用积类型——两者组合即可精确建模大多数领域概念。

参考来源

- 位置:《解构领域驱动设计》附录A A.3.1(源文件:_epub-src/OEBPS/034.xhtml) - 结论依据:原文定义 ADT 的和类型与积类型及其组合,并强调其不变性。 - 原始内容:它利用和类型(sum type)展示相同抽象概念的不同组合,使用积类型(product type)展示同一个概念不同属性的组合。