10 月 23 - 25 日,QCon 上海站即将召开,现在大会已开始正式报名,可以享受 8 折优惠 了解详情
写点什么

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

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

评论

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

为什么说企业需要实施知识管理?

Baklib

行走的Offer收割机!首次公布Java10W字面经,Github访问量破百万

Geek_0c76c3

Java 数据库 开源 程序员 面试题

这些Java基础知识,诸佬们都还记得嘛(学习,复习,面试都可)

钟奕礼

编程 java;

实战案例,个个是经典,不愧是阿里P7私传“并发编程核心讲义”,竟能讲的如此通透

程序知音

Java 并发编程 多线程 高并发 后端技术

荣耀开发者平台全面升级,加强分发场景服务与能力开放

荣耀开发者服务平台

开发者 手机 安卓 荣耀 honor

[iOS研习记]聊聊iOS中的Mach-O

珲少

微服务框架搭建过五关斩六将—第一关(网关)

为自己带盐

微服务 网关 9月月更

未来智安加入中国通信标准化协会成为全权会员

未来智安XDR SEC

聊一聊新陈代谢

小鲸数据

创新 新陈代谢

如何使用iMazing监督、配置器功能

淋雨

ios iphone

易观分析互联网+慢病管理生态洞察,助力行业升级

易观分析

医疗

【编程实践】详解MySQL在Python中的使用(1)

迷彩

Python MySQL 数据库 pymysql 9月月更

Redis进阶知识点(可学习,可复习,可面试)

钟奕礼

java; 编程、

信我,Java面试的苦只吃一次,看完这八股文合集,渣渣也能进大厂

钟奕礼

编程 java;

【云原生 | 从零开始学Kubernetes】十二、k8spod的生命周期与容器钩子

泡泡

Docker 云计算 云原生 k8s 9月日更

Jmix 中 REST API 的两种实现

世开 Coding

Java Spring Boot Jmix 少代码 企业级开发

SaaS时代,您的企业与团队需要知识管理工具

Baklib

他来了!袋鼠云大数据基础平台EasyMR正式上线

袋鼠云数栈

模块一作业

知足🐏

好的,DFS,也学废了!

掘金安东尼

前端 9月月更

《软件开发的201个原则》思考:7.尽早把产品交给客户

非晓为骁

软件开发201原则

西部省份数字化需求暴涨 首届828 B2B企业节见证企业数字化新浪潮

科技热闻

开源技术公开课丨Taier工作流的介绍

袋鼠云数栈

如何查询已经执行过的流程信息?

江南一点雨

springboot workflow flowable

红海竞争下,「社交+」在中东泛娱乐 App 市场的出海新机遇

融云 RongCloud

白皮书 泛娱乐 出海

开源项目丨ChengYing 1.1版本重磅发布:新增超多功能,全新优化体验!

袋鼠云数栈

ChunJun&OceanBase联合方案首次发布:构建一体化数据集成方案

袋鼠云数栈

开源直播课丨高效稳定易用的数据集成框架——ChunJun类加载原理与实现

袋鼠云数栈

实用五步法教会你指标体系的设计与加工

袋鼠云数栈

面试中经常问到的几个问题,快来看看能答对几道吧(Java)

钟奕礼

java; 编程、

Android 开发环境的搭建(Android Studio + 逍遥模拟器)

Android Studio 安卓开发 9月月更

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