写点什么

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

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

评论

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

手摸手教你阅读和调试大型开源项目 ZooKeeper

HelloGitHub

Java zookeeper 源码分析 ZooKeeper原理

区块链电子合同--助推合同数字化管理

13530558032

架构实战营 模块1作业

唐江

架构实战营

python 调用 cmd 而不显示黑框的方法

一代咩神

Python cmd

智慧平安社区建设,创建“三零平安社区”

13530558032

模块一作业

chenmin

Prometheus2.25新特性讲解

远鹏

Prometheus cncf openmetrics

Spring IOC 特性有哪些,不会读不懂源码!

小傅哥

Java spring 小傅哥 控制反转IOC

年薪百万是社会认同,更是自身价值体现

博文视点Broadview

区块链农产品质量安全溯源,保证农产品品质

13530558032

模块一-学生管理系统架构设计

华仔架构训练营

旋转木马案例

赫鲁小夫

4月日更

马特量化交易机器人,炒币24小时不停歇

飞亚科技

空中交警:借你一双“慧眼”,让你看透这飞机的“黑色十分钟”

华为云开发者联盟

modelarts yolo 华为云ModelArts 模型开发 华为开发者大会2021

架构实战营 模块1 课后作业

༺NPE༻

使用 lxrunoffline 管理运行wsl

LeetCode题解:剑指 Offer 49. 丑数,二叉堆,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

3w 字长文爆肝 Java 基础面试题!太顶了!!!

苹果看辽宁体育

Java 面试 后端

区块链产业园区服务平台开发,搭建区块链园区运营平台

13828808769

区块链+ #区块链#

区块链农产品溯源平台,为农产品质量安全护航

13828808769

区块链 区块链+

初识Nginx(一)

书旅

nginx

Golang 字符串分组

一代咩神

Go 语言

模块一:课后作业

iHai

架构实战营

花费一月时间吐血整理程序员必读书单,建议收藏

Silently9527

程序员

手把手教你写一个spring IOC容器

华为云开发者联盟

spring 容器 ioc spring框架

架构实战营模块一作业

Geek_vidmje

架构实战营

盘点 15 个好用的 API 接口管理神器

Java小咖秀

工具 工具分享

Spark数据倾斜方案实战(二)

小舰

4月日更

善盾SD币是什么?

飞亚科技

架构实战营作业:模块一

心晴雨亦晴(~o~)

Rust从0到1-结构体-一个例子

rust struct

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