写点什么

领域驱动设计中的函数模式

  • 2014-07-08
  • 本文字数:955 字

    阅读完需:约 3 分钟

领域驱动设计(DDD)为了鼓励开发人员创建领域模型和通用语言(ubiquitous language )做了大量工作,但是尝试运用面向对象原则里面的状态和行为的概念来实现DDD 思想最终得到的常常只是一套混乱易变的模型, Debasish Ghosh 在一篇文章中阐述了领域驱动设计中的函数模式

Debasish 是 ACM 资深会员和《 DSLs in Action 》一书的作者,他认为,从某种意义上讲,当把与某个特定的领域抽象相关的所有概念都放在一个类里面时,这个模型的信息可能就会非常丰富;但是由于这种方式只关注于局部而忽略了全局性的诉求,也就使得这个类变得更加脆弱。因此,当将领域内的所有抽象概念进行组合的时候,它可能就会被中间代码污染而不能解决类边界之间的阻抗失配(impedance mismatch)问题(译者注:“阻抗失配”这一词组通常用来描述面向对象应用向传统的关系数据库存放数据时所遇到的数据表述不一致问题)。

在他的主张中,他提到了 Dean Wampler ,最近 Dean Wampler主张函数式编程原则可以帮助改进领域驱动设计。Dean 声称“模型应该是贫血的”,并鼓励领域对象只拥有状态而将行为移到单独的函数中。

Debaish 所反对的另一种说法就是将状态和行为打包到一个类中来加强封闭性。他反而认为按照 DDD 的原则,将领域行为作为单独的函数来进行构造会更好地促进模块化和实现领域模型。在这种方式下,所有的领域行为都被作为模块中的函数来进行建模,而这个模块就代表了这些函数的组合体。

作为例子,在之前发布的博客文章中,他运用函数式编程原则在 DDD 中实现了规范(Specification)和聚合(Aggregate)模式,他在这篇文章中采用函数模式和函数来像搭积木一样构建行为,而这些行为建立了该领域的通用语言的模型。Debaish 声称 DDD 的一个原则就是将领域模型的词汇表上升到你的实现的高度,这样在整个系统生命周期里,这些功能就会变得更加明显。

Dean Wampler 在四月份的 React conference 上还做了一个主题类似的关于响应式设计(reactive design)和语言范式( language paradigms)的报告演讲。

查看英文原文: http://www.infoq.com/news/2014/05/functional-patterns-ddd


感谢杨赛对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-07-08 06:502227

评论

发布
暂无评论
发现更多内容

掌握这些核心算法,拿不到10+个offer你来找我,我锤飞你个不争气的

北游学Java

Java 算法

Baetyl邀你来战EdgeX中国挑战赛!

百度开发者中心

人工智能 最佳实践 物联网

Tensorflow for Java + Spark-Scala分布式机器学习计算框架的应用实践

Qunar技术沙龙

机器学习 tensorflow spark 后端 分布式计算

"开放数据,蔚然成林"—浪潮助力多地获得数据开放全国标杆

云计算

15年前的3篇论文,变成了万亿大生意

百度大脑

人工智能 论文

基于深度学习的实时噪声抑制——深度学习落地移动端的范例

声网

人工智能 算法 移动端

PancakeSwap交易所做市机器人|交易所画K线机器人

Geek_23f0c3

交易所机器人 pancakeswap 做市机器人

都2021年了,还在问网络安全怎么入门,气得我当场脑血栓发作

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

极致性能一睹为快!阿里全新出品性能优化手册 从此拒绝系统瘫痪!

Java 编程 程序员 架构师 计算机

某宝付费的Redis核心原理深度实践PDF,竟在GitHub标星86k+霸榜

白亦杨

Java 编程 程序员 架构师 计算机

完善数字人民币发行应用机制 打造可靠金融基础设施

CECBC

CRUD 程序员勿进!JDK源码剖析手册与并发编程图册,完美诠释高并发

Java 编程 程序员 IT 计算机

《面试八股文》之 Redis 16卷

moon聊技术

redis 面试

Go 语言的信号式抢占原理

Xargin

后端 Go 语言 系统编程

架构训练营 模块三

小卷儿

为什么双赞安卓ARM工控主板应用前景那么好?

双赞工控

深入了解Spring之Environment

邱学喆

Profile Environment PropertySource PropertySources

加码物联网安全,熵核科技做终端安全的守护者

熵核科技

spring,springboot,底层原理解析

java小李

学生管理系统详细架构设计文档

张文龙

#架构实战营

祝贺中国跳水队夺金!百度智能云挺敢做梦的人

百度大脑

人工智能 跳水队

粉了!京东商城核心亿级流量并发Java系统架构设计方案手册

Java架构追梦

Java 架构 面试 高并发 京东

CODING 携手 CoDesign:让设计与开发更简单

CODING DevOps

DevOps 设计 开发工具 CoDesign

一种Vue应用程序错误/异常处理机制

devpoint

Vue 异常处理 vue2 7月日更

Java版人脸检测详解上篇:运行环境的Docker镜像(CentOS+JDK+OpenCV)

编程菌

Java 编程 程序员 后端 java技术宅

应届女生美团Java岗4面,一次性斩offfer,我受到了万点暴击

编程菌

程序员 面试 后端 计算机

关于体验设计的十大重要定律

石云升

读书笔记 用户体验 商业洞察 7月日更 体验设计

使用MLlib进行机器学习(十-下)

Databri_AI

spark 决策树 优化

Vue进阶(三):Axios 应用详解

No Silver Bullet

Vue axios 7月日更

架构实战营 毕业总结

竹林七贤

阿里 P8 熬了一个月肝出这份 32W 字 Java 面试手册,在 Github 标星 31K+

Java 编程 架构 面试 IT

领域驱动设计中的函数模式_后端_Jan Stenberg_InfoQ精选文章