写点什么

行为驱动开发与领域驱动设计相结合

  • 2015-03-08
  • 本文字数:1133 字

    阅读完需:约 4 分钟

虽然行为驱动开发 (BDD) 更针对于会话和示例,但是 BDD 还有另外一面,就是软件设计部分。Konstantin Kudryashov 通过将 BDD 的会话部分和专注于领域的设计活动相结合,诠释了BDD 是如何用于领域驱动设计 (DDD) 的。

作为 BDD 实践经理, Kudryashov 描述了使用 BDD 书写用户故事中的场景的两种形式。命令式书写的用户故事从技术角度描述了应用将如何工作,通常会与实现相耦合;声明式书写的用户故事描述了问题和用户想达到的目的。他更喜欢后者。无论使用哪种形式书写,大多数 BDD 的实践者将停留在这个描述程度上,并将这些场景用于驱动实践,Kudryashov 相信这还远远不够,这种描述丢失了很多对业务非常重要的细节。通过与领域专家讨论,可以澄清命名、寻找丢失的关联信息等等。场景撰写可以包含更多细节,当使用业务人员和开发人员共享的通用的语言撰写时,通用语言 (ubiquitous language) 将会从中形成,这是 DDD 的核心概念之一。Kudryashov 宣称,通过这种方式撰写的场景将成为一种领域模型。

大力推动通用语言,就能够让示例成为领域模型

大多数 BDD 的实践者采用的测试方法是由外及内的方式,通过用户接口、界面来测试每个场景。与之相反,DDD 的实践者更针对领域核心,对他们来说关注点是隐藏在龟速而且脆弱的用户界面后面的,因此,他们趋向于工作在由内向外的方式下,从领域核心开发。直至其实现足够稳定,于核心之上实现的用户界面才会随之完成。为了强调这一点,Kudryashov 引用了 Vaughn Vernon 所著的《实现领域驱动设计》一书中的内容:

应用边界,或者内六边形也是用例(或者用户故事)的边界。换句话说,我们应当基于应用的功能性需求,而不是各种客户端或者输出装置的数量来创建用例。

为了将 BDD 和 DDD 实践放在一起,两种技术需要结合使用。为此,Kudryashov 首先去除了用户界面,然后通过领域来运行测试。从领域部分开始设计,与业务人员的对话就形成了架构师,针对问题领域进行不同的描述,将产生不同的架构,这种架构对于该领域来说更为自然。Kudryashov 发现这种方式的一个好处是去除持久层需求和前述场景中的用户界面,将大大缩减与领域专家会话的反馈循环,提高理解领域的速度。

使用这种方法,用户界面不再是应用的中心,而只是领域的一个控制器。只有用户界面是场景中的重要部分并且是应用所必需时才添加用户界面,而此时该领域早已被证明是可以工作的了。

在去年的一次演讲中,Ian Cooper 在讨论行为测试时使用过六边形架构

查看英文原文: Behaviour-Driven Development Combined with Domain-Driven Design


感谢邵思华对本文的审校。

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

2015-03-08 08:312085

评论

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

助推专精特新企业数字化的低代码

力软低代码开发平台

云渲染和渲染农场的区别在哪里?

Finovy Cloud

云计算 云渲染 渲染农场

欢迎航天宏图加入社区

openGauss

金奖方案 | 一专多能、傲视寰宇,南大通用GBase8c数据库牛在哪里?

openGauss

openGauss的高效数据压缩算法

openGauss

华为云会议助力云上办公更加容易

爱尚科技

openGauss-graph 0.1.0版本正式发布

openGauss

AI/ML如何在山林防火中大显身手?

澳鹏Appen

人工智能 工业4.0 工业 数据标注 防火

智慧医疗时代,如何更精准、更智能、更高品质?

澳鹏Appen

人工智能 医疗 数据标注 智慧医疗 AI医疗

openGauss —— 智能优化器之基数估计

openGauss

(Java开发岗)了解大厂面试基本套路及每一轮的重点

程序知音

Java 后端 java面试 java架构 互联网大厂面试

Wallys/IPQ8072/IPQ8074/2x(4×4 or 8×8) 11AX/IPQ6010 (IPQ6018 FAMILY)/industrial wifi6 moudle

wallysSK

IPQ6010 ipq6018 IPQ8072 IPQ8074

华为云桌面Workspace云上办公,方便得很!

科技说

Serverless Devs 重大更新,基于 Serverless 架构的 CI/CD 框架:Serverless-cd

阿里巴巴云原生

阿里云 Serverless 云原生

MobPush for ReactNative

MobTech袤博科技

RocketMQ 客户端负载均衡机制详解及最佳实践

阿里巴巴云原生

阿里云 RocketMQ 云原生

华为云会议让企业会议想开就开

爱尚科技

腾讯生态大会倒计时1天!

ToB行业头条

Java实战案例-动态调色板

小院里的霍大侠

Java 实战案例 初学者 入门学习

面试官:介绍一下 Redis 三种集群模式

Jeremy Lai

redis集群

重磅来袭!爆肝一周整理的多线程&高并发笔记(含面试题+导图+笔记)

小小怪下士

Java 面试 多线程 高并发

面试卡在多线程?那就分享几道Java多线程高频面试题,面试不用愁

钟奕礼

Java 程序员 java面试 java 编程

京东云正式加入openGauss社区,共筑数据库科技服务供应链

openGauss

使用 Rainbond 搭建本地开发环境

北京好雨科技有限公司

Kubernetes rainbond

如何拆掉跨部门的墙?

PMO实践

项目管理 企业管理 跨部门沟通

WebGL入门之基于WebGL的Sovit3D可视化平台

2D3D前端可视化开发

数据可视化 WebGL 三维可视化 web3d 3d绘图引擎

openGauss企业级开源数据库荣获2022年度中国计算机学会(CCF)科技进步奖特等奖

openGauss

事务

ssun

事务 JAV A 11月月更

为啥PMO困惑的起因和其他职能部门不一样?

PMO实践

项目管理 PMO

公司真的需要PMO吗?

PMO实践

项目管理 PMO

华为云大数据轻量级解决方案,让数据“慧”说话

科技说

行为驱动开发与领域驱动设计相结合_语言 & 开发_Jan Stenberg_InfoQ精选文章