写点什么

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

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

评论

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

终于拿到了爆火全网的进一线大厂程序员必看的1700道java面试题

做梦都在改BUG

Java java面试 Java八股文 Java面试题 Java面试八股文

2023最NB的JVM基础到调优笔记,光图文就超清晰,吃透阿里P6小case

Java你猿哥

Java JVM Java虚拟机 jvm调优

Go语言开发小技巧&易错点100例(四)

闫同学

三周年连更

本周参加两个SAP项目面试后的感想

SAP虾客

面试 SAP项目 行业经验

Unity 之 Post Processing后处理不同项目配置(UPR项目配置)

陈言必行

Unity 三周年连更

一个强大的go生产力工具,极大的提高开发效率、缩短开发项目时间和人工成本

vison

微服务 gRPC Go 语言 gin 代码自动生成

Java并行流:一次搞定多线程编程难题,让你的程序飞起来!

Java你猿哥

Java 多线程 SSM框架 java 并发

Spring 事务及传播机制原理详解

做梦都在改BUG

Java spring 事务

鲲鹏DevKit原生开发,效率倍增使能极简开发

乌龟哥哥

鲲鹏 DevKit 三周年连更

【坚果派 - 坚果】OpenHarmony编译命令

坚果

OpenHarmony 三周年征文 三周年连更

终于拿到了阿里技术专家分享的552页大型网站架构实战文档

做梦都在改BUG

Java 架构 网站架构

带你浅谈下Quartz的简单使用

Java你猿哥

Java SSM框架 quartz

MySQL索引15连问,你扛得住吗?

做梦都在改BUG

Java MySQL 数据库 索引

API渗透测试之漏洞发现

阿泽🧸

三周年连更

AI日课@20230413:Prompt Engineering 02 - 原则

无人之路

ChatGPT

深度分析:SpringBoot中自定义starter实例与原理

Java你猿哥

spring Spring Boot SSM框架 Spring boot starter test

SpringBoot中如何解决Redis的缓存穿透、缓存击穿、缓存雪崩?

做梦都在改BUG

面试官:类是如何加载的?

做梦都在改BUG

用情景领导力帮助团队管理-1

搬砖的周狮傅

京东面试题:说说synchronized和volatile的区别

做梦都在改BUG

Java volatile JMM synchronized

好用的pdf格式转换器:PDF to Word Document Converter 激活版

真大的脸盆

Mac PDF Mac 软件 PDF格式转换

Java面向对象编程基础

timerring

Java

霸榜Github三个月的「架构师成长手册」!成为架构师竟然也有捷径

Java你猿哥

Java 分布式 架构设计 架构师 SSM框架

硬核!阿里P8自爆春招面试核心手册,Github上获赞65.7K

做梦都在改BUG

Java java面试 Java八股文 Java面试题 Java面试八股文

ES6中的Proxy

格斗家不爱在外太空沉思

JavaScript ES6 三周年连更

Java的访问修饰符

Java你猿哥

Java oop SSM框架

劲爆!阿里巴巴面试参考指南(嵩山版)开源,程序员面试必刷

做梦都在改BUG

Java 程序员 面试

2023-4-13 某SAP项目面试小记

SAP虾客

SAP EWM SAP Ariba SAP Workflow SAP PM

我给大家免费公开五份阿里Java架构师学习手册!助力金三银四

Java你猿哥

Java 架构 算法 高并发 Java性能调优

FastDFS收藏起来,现在开始用Minio吧

会踢球的程序源

Java fastdfs

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