建立函数模型的步骤和方法 数学建模的步骤过程

领域模型=代码如果说敏捷应用研究主张面对面沟通交流 。通过超快迭代的手段 。让有价值的应用尽早面向市场 。从而适应超快变化的要求 。

建立函数模型的步骤和方法 数学建模的步骤过程

文章插图
那么DDD则为敏捷研究过程中的沟通交流形式 。作出了进一步的补充 。纵观DDD的所有环节 。无一不是在打通领域专家和研究人员之间的沟通交流和交流 。DDD的精髓在于通过让研究人员理解领域 。进而让研究人员使用编程语言建立一个跟领域专家脑海中一致的领域模型 。使得该领域模型成为各位共享知识的途径 。这将有效的减少不同利益相关者的沟通交流及交流 。确保所有人都在解决同一个问题 。
建立函数模型的步骤和方法 数学建模的步骤过程

文章插图
共享模型=代码=文档我还清晰的记得我的第一份工作 。每当有代码或者设计改动时 。都要去更新UML类图以及数据库设计文档 。这些文档大概充当着共享模型的作用 。但是最终这些设计类图和文档都长久以来变得不可信 。因为没有任何手段保证文档会被及时跟新 。
说实话代码比较擅长表示设计内容 。从本质上讲 。源代码是一个文档 。可以完美地描述产品的每个目前设计决策 。
原则上 。如果研究人员用代码创建了一个领域专家脑海中一致的领域模型 。则代码无疑是最有效 。最实时的共享模型 。
唯一制约这个等式的鸿沟在于领域专家能否读懂代码 。而简单易学 。有表示力 。直观的编程语言则能在创建领域模型的过程中占领一些优势 。
领域建模领域建模是整个DDD环节中最最考验研究人员功底的一环 。不同于经典的数据库建模技术 。研究人员需要有很好的抽象能力 。通过恰如其分的编程技术 。将领域知识映射到一个代码模型中 。
长期以来OO语言被认为是领域建模的首选 。一些OO的技术可以很好的用来抽象领域模型 。而函数式语言则被普遍认为只能用来做数据处理 。科学计算等 。本文将为各位展示如何通过函数式编程语言进行领域建模 。本文选用TypeScript编写实例 。TypeScript类型系统完全满足函数式编程要求 。当然本文也适合用于其他拥有静态类型系统并拥有代数数据类型的函数式编程语言 。
TypeScript的类型系统相对于OO 。你只要知道少量的语法知识就可以开始领域建模了 。从这个角度来讲 。说实话代数数据类型更适合领域建模 。从而让领域模型成为文档 。
类型各类编程语言在设计的时候就已经提供了差不多string, bool, number等简单类型(primitive) 。然而在真实世界里面 。你还需要将这些类型组合成更大的类型 。从而来映射现实世界 。
在TypeScript中 。type关键字用来组合更大的类型:type Name = { firstName: string middleName: string lastName: string}上面类型的用途是明显可以看见的 。除此之外type还有起别名的用途 。不要小瞧这个特性 。他可以帮助你把领域知识记载在你的领域模型中 。考虑下面的代码:
const timeToFly = 10
你能一眼看出这句代码代表的领域知识吗?也许不能 。fly多久?查文档?No 。你应该时刻告诉自己 。代码等于文档 。改进后的代码如下:
type Second = numberconst timeToFly: Second = 10Or类型在TypeScript 。这种类型被称为联合(Union Types) 。通过符号|来创建 。考虑下面的类型:
type Pet = Fish | Bird
Pet是Fish或者是Bird类型 。一般来探讨函数式语言都会有强大的模式匹配能力 。来处理这种或类型 。然而受制于TypesScript没有模式匹配或者说能力很弱 。通常情况下 。会在类型里面添加一个字符串字面量, 从而来区分不同的类型, 在次不再细说 。
And类型在Typescript中 。这种类型被称为交叉类型(Intersection Types) 。通过符号&来创建 。考虑下面的类型:
type ABC = A & B & C
表示ABC类型包含所有A、B、C三个类型里面的属性 。
定义函数类型在TypeScript中 。函数与其他类型没什么区别 。也完全可以通过type关键字来定义 。例如:
type Add = (a: number) => (b: number) => number
Add是一个函数 。接收两个类型为number的类型a和b 。返回number 。
通过代码来共享领域知识type CreditCard = { cardNo: string firstName: string middleName: string lastName: string contactEmail: Email contactPhone: Phone}通过前面介绍的知识 。咱们非常的容易就可以写出上面的代码 。用来描述CreditCard这种付款选项 。注意咱们没有使用class 。
但这就是一个靠谱的领域模型吗?如果不怎么靠谱 。它的问题在哪里?

推荐阅读