我在使用 C# 编写领域驱动应用程序方面拥有丰富的经验。我编写的应用程序越多,我就越发现我想要采用一种不太适合标准 C#/OO 技术的方法:
- 我想编写尽可能多的纯函数,因为它们真的很容易测试。
- 我想以更具声明性的方式编写我的业务逻辑。
所以我一直在研究函数式语言,例如 F#。毕竟领域驱动设计没有理由has使用OO来实现。
我想知道是否有人对使用函数式语言进行领域驱动设计有任何想法/经验。尤其:
- 功能域模型会是什么样子?
- 您将如何从域模型中抽象数据访问层。
免责声明:我对领域驱动设计只有模糊的了解,所以答案可能没有使用正确的术语,并且可能过度关注代码而不是一般概念,但无论如何,这里有一些想法......
重点在于理解domain对于人们一般使用函数式编程语言的方式来说,而不是设计特定的功能或对象来实现它们似乎是很自然的。通常(至少在功能应用程序的一部分中),您首先要设计描述(或建模)您正在使用的世界的数据结构。数据结构与实现分离,因此它可以很好地建模领域。
一个非常好的例子描述于关于撰写金融合同的论文 http://research.microsoft.com/en-us/um/people/simonpj/papers/financial-contracts/contracts-icfp.htm。该示例是金融合同评估(和其他处理)的应用程序。最重要的是创建合同模型——它们实际上是什么?为了回答这个问题,作者设计了一个用于描述合约的数据结构。就像是:
type Contract =
| Zero // No trades
| Single of string * float // Single trade (buy something for some price)
| And of Contract * Contract // Combine two contracts
| Until of Contract * DateTime // Contract that can be executed only until...
// (...)
还有一些其他情况,但数据结构非常简单,并且对金融行业使用的各种相当复杂的合约进行了建模。
Summary我认为对用于对世界进行建模的数据结构(并与使用它们的实现分离)的关注与 DDD 的关键概念非常接近。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)