【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

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

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

评论

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

亚马逊云科技 2022 年 3 月新服务新功能强势来袭

亚马逊云科技 (Amazon Web Services)

服务 亚马逊

企业如何才能发挥出知识管理真正的价值

小炮

知识管理 企业知识管理

4月28日,一场为IT工程师们准备的盛宴

观测云

云原生 可观测性 IT 直播 产品发布会

OpenHarmony 3.1 Beta样例:使用分布式菜单创建点餐神器

OpenHarmony开发者

OpenHarmony OpenHarmony应用开发 点餐

云图说丨云数据库 RDS for MySQL一键开通读写分离,轻松应对业务高峰期

华为云开发者联盟

MySQL 华为云 读写分离 云数据库 rds for mysql

10月阿里面试总结:必问的Spring面试解析,面试时要注意的那些坑

爱好编程进阶

Java 面试 后端开发

java培训Mybatis动态Sql处理解析

@零度

sql mybatis JAVA开发

网站速度优化的三套解决方案!

源字节1号

微信小程序 前端开发 后端开发 SEO优化

2020大厂秋招面试末班车,阿里架构师献给java程序员的面试全攻略

爱好编程进阶

Java 面试 后端开发

2021春招涨薪跳槽技术必备:分布式宝典“限流

爱好编程进阶

Java 面试 后端开发

建信金科在中国建设银行物联网平台项目的实践

EMQ映云科技

物联网 IoT 金融 银行 emq

5 月亚马逊云科技培训与认证课程,精彩不容错过!

亚马逊云科技 (Amazon Web Services)

架构师 培训 认证

加速OpenHarmony生态繁荣,华为使能OpenHarmony发行版厂商

科技汇

从玄学走向科学:在字节跳动广告投放这么干

字节跳动数据平台

大数据 字节跳动 广告系统 ab测试

测试的最终产物是什么

chenkl

测试 思维 测试原则

入驻快讯|欢迎小红书技术团队正式入驻 InfoQ 写作社区!

InfoQ写作社区官方

入驻快讯

CVPR2022 前沿研究成果解读:基于生成对抗网络的深度感知人脸重演算法

阿里云视频云

阿里云 计算机视觉 音视频 视频云 人脸算法

CentOS8安装Docker

爱好编程进阶

Java 面试 后端开发

探究Presto SQL引擎(2)-浅析Join

vivo互联网技术

数据库 算法 presto

攻克编译器技术

刘旭东

编程语言 编译器原理 4月月更

web前端培训React基础知识点的梳理

@零度

前端开发 React

TASKCTL 作业流程与模块之间的区别

TASKCTL

Docker kettle 批量任务 调度引擎 ETL任务

网易互娱基于 Flink 的支付环境全关联分析实践

Apache Flink

大数据 flink 编程 流计算 实时计算

移动应用性能管理白皮书最新发布

基调听云

APM App 基调听云 行业报告

EasyRecovery2022全功能数据恢复介绍

茶色酒

EasyRecovery15

设计消息队列存储消息数据的MySQL 表格

Geek_8d5fe5

「架构实战营」

大数据培训Flink 常见的维表 Join 方案

@零度

大数据 flink join

Docker 实战教程之从入门到提高 (六)

Jerry Wang

Docker 容器 docker image 容器镜像 4月月更

2021最新「阿里」Java高级工程师面试高频题

爱好编程进阶

Java 面试 后端开发

28岁自学java,包装简历3年拿到15k薪资,分享我的学习经历

爱好编程进阶

Java 面试 后端开发

Flink 流批一体在小米的实践

Apache Flink

大数据 flink 编程 流计算 实时计算

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