写点什么

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

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

评论

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

一位Android程序员入坑Flutter后整理出一份超详细的学习笔记

android 程序员 移动开发

一年Android工作经验,一举拿下百度、网易,38岁的中年失业者怎么活下去

android 程序员 移动开发

【带着问题学】关于LeakCanary2,2021百度Android岗面试真题收录解析

android 程序员 移动开发

【译】Flutter vs React Native vs Native,android开发社区

android 程序员 移动开发

【面试专题】2021年字节,面试安卓工程师会问到那些问题

android 程序员 移动开发

一个五年Android开发者小米、阿里、字节跳动,最新阿里+头条+腾讯大厂Android笔试真题

android 程序员 移动开发

【孔乙已】生产者消费者有四样写法,android插件化和组件化

android 程序员 移动开发

【最强】Android 项目集成 Flutter 实战分享,精通android游戏开发

android 程序员 移动开发

一文读懂 AOP _ 你想要的最全面 AOP 方法探讨,kotlin数据库框架

android 程序员 移动开发

一直认为Android不好找工作的同学,你的问题在这里!(1)

android 程序员 移动开发

一文理解模块化、组件化、插件化的区别,最新Android高级面试题汇总

android 程序员 移动开发

【微信小程序】开发实战 之 ,这份333页关于性能优化知识点的PDF你不能不看

android 程序员 移动开发

【转载】3-5年的Android工程师最容易遇到4个瓶颈是什么

android 程序员 移动开发

【需求解决系列之四】Android App 在线 自动更新,android观察者模式

android 程序员 移动开发

一文了解Dart语法,kotlin密封接口

android 程序员 移动开发

一次违反常规的大厂OPPO面试经历(文末有面试答案领取)

android 程序员 移动开发

【建议收藏】Android中高级大厂面试源码秘籍,面试题+笔记+项目实战

android 程序员 移动开发

【绝对干货】超全Android中高级面试复习大纲,安卓面试题目2019

android 程序员 移动开发

【自学Flutter】4,安卓移动开发基础案例教程

android 程序员 移动开发

一个优秀程序员不可避免的问题:内存泄漏,ffmpeg音视频开发实战6下载

android 程序员 移动开发

【面试官爸爸】来给我讲讲View绘制,腾讯T2亲自教你

android 程序员 移动开发

下一个三年,联想要寻找取天火的人

脑极体

9.9元试用无影电脑,开启云上办公娱乐新体验

【译】Flutter 2,Android程序员必会

android 程序员 移动开发

浪潮云说丨千呼万唤,浪潮云智能视觉来了!

云计算

一次奇葩面试经历,没去过BAT的Android研发就不配面试架构师?

android 程序员 移动开发

【建议收藏】Android中高级大厂面试源码秘籍(1),android开发实战湖南师范大学出版社

android 程序员 移动开发

一个34岁出来面试还被拒绝的Android程序员有多惨?,android开发软件安装JAVA路径

android 程序员 移动开发

一个Android开发真实的996生活,我们到底在追求什么?,kotlin中文教程

android 程序员 移动开发

一个HashMap,阿里面试官竟然跟我扯了半个小时!,掌握这6大技能体系

android 程序员 移动开发

腾讯云音视频发布腾讯云视立方等多款新品,助力全行业快速构建音视频能力

科技热闻

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