我正在使用 javascript 中的函数式编程构建基于域驱动设计的应用程序。我已将 sanctuary.js 生态系统作为我选择的工具,但我在建模类型方面面临一些挑战。
为了把事情放在上下文中,让我们以下面的代码为例:
const { create } = require('sanctuary')
const $ = require('sanctuary-def')
const def = create({
checkTypes: process.env.NODE_ENV === 'development',
env: $.env
})
const Currency = $.EnumType
('Currency')
('http://example.com')
(['USD', 'EUR'])
const Payment = $.RecordType({
amount: $.PositiveNumber,
currency: Currency,
method: $.String
})
我的困惑点如下:
- 如何使用 sanctuary-def 定义简单类型?从上面的例子中,如果我想定义一个Amount类型并在 Payment RecordType 定义中使用它,我该怎么做呢?我必须为此定义另一个 RecordType 吗?
- 我在这里可能错了,但到目前为止我的理解是RecordType相当于函数式编程中的产品类型。使用 sanctuary.js 定义 sum 类型的方法是什么?上面的EnumType很接近,但似乎是用于简单值,而不是其他类型。更像是,如果我有另外两种类型Cash和Card,我将如何将另一种类型PaymentMethod 建模为Cash和Card之间的选择?
我很高兴有任何指示。我对函数式编程和 sanctuary.js 都很陌生,所以如果我缺少明显的东西,我会很感激朝着正确的方向轻推。
非常感谢。