AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

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

  • 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:502426

评论

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

阿里内部疯传的分布式架构手册,轻松吊打小日子过的不错的面试官

编程 程序员 架构 分布式

架构实战营-模块三作业

无名

架构实战营 「架构实战营」

吐血整理:常用的大数据采集工具,你不可不知

小术晓术

大数据 数据采集

速看!从源码到实战,腾讯大牛纯手码48W字SpringCloud实战笔记

Java 编程 程序员 面试 SpringCloud

gitlab-runner构建解决java缓存问题

ilinux

第四范式OpenMLDB在金融风控数据库的计算优化实践

第四范式开发者社区

第四范式 开源技术 OpenMLDB datafun

基于SVDD算法的半监督风控模型

索信达控股

算法 风控模型 半督导算法

❤️这应该是Postman最详细的中文使用教程了❤️(新手使用,简单明了)

六十七点五

软件测试 性能测试 Postman 自动化测试 接口测试

Apache Pulsar 在能源互联网领域的落地实践

Apache Pulsar

架构 云原生 Apache Pulsar 消息系统 用户案例 能源互联网

ShowMeBug 中如何科学的识别用户浏览器?

ShowMeBug

大前端 浏览器 WebRTC

外包学生管理系统架构文档

Steven

架构实战营

视频通信关键技术探索及实践

网易云信

音视频 通信云

腾讯云数据库TDSQL首次登上财报!TDSQL在不同金融机构核心系统中的渗透率明显提升

科技热闻

如何在 MySQL / MariaDB 中导入导出数据,导入导出数据库文件、Excel、CSV

蒋川

MySQL 数据库 MariaDB 卡拉云

无锡农商行王宗:敏态转型,实现科技引领业务的华丽转身

BoCloud博云

微服务 云原生

Aeron是如何实现的?—— Conductor

BUG侦探

Aeron Conductor

电脑数据恢复用哪款软件比较好

淋雨

EasyRecovery

今天面了个腾讯拿38K出来的大佬,让我见识到了基础的天花板

收到请回复

Java 程序员 后端

绝绝子!美团大牛吐血整理总结“消息队列核心知识笔记”是真的吊

编程 程序员 MQ 队列

腾讯云开源百万级服务发现和治理中心“北极星”,打造可持续微服务生态

科技热闻

ShowMeBug 黑科技丨一招快速实现架构绘图之鼠标同步

ShowMeBug

思维导图 实时同步 绘图库

FlyFish 1.0发布,新增4个可视化组件

云智慧AIOps社区

大前端 低代码 数据可视化

千万不要小瞧复杂度分析,代码详解复杂度的重要性

小Q

Java Python 学习 数据结构 算法

HTTP与HTTPS,HTTPS更加安全。

喀拉峻

网络安全 安全 信息安全 HTTP

Java 设计模式 Monads 的美丽世界

码语者

Java 设计模式 Monads

腾讯安全推出御界NDR「横移检测版」,全面检测域渗透攻击

腾讯安全

今日谈:数字信号常用编码、香农公式、信道复用技术

Regan Yue

计算机网络 网络工程师 11月日更

《大教堂与集市》

石云升

读书笔记 开源 11月日更

安全漏洞之经典上传漏洞

网络安全学海

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

第三阶段总结

张靖

#架构实战营

腾讯Q3财报:腾讯企点服务超100万家企业,显著降低客服成本

科技热闻

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