GMTC全球大前端技术大会(北京站)门票9折特惠截至本周五,点击立减¥480 了解详情
写点什么

Paul Rayner 认为 DDD 和敏捷可以共存

2016 年 6 月 23 日

在领域驱动设计欧洲 2016 大会上,Paul Rayner 在演讲中提出将领域驱动设计(DDD)引入敏捷软件交付过程。他将敏捷视为一种组织工作的方法,而不是一种界定工作方式的规定。他认为敏捷参与者经常不够重视设计,建议使用DDD 概念作为一种克服这些缺点的方式。更进一步,Rayner 认为,敏捷与DDD 的结合可以加速软件交付。

在从事顾问工作的过程中,Rayner 见过许多践行敏捷的团队强调MVP(最小可行产品)的重要性以致损害了设计。他引用了Douglas Martin 关于设计必然性的观点:“好设计的替代品是坏设计,而不是完全无设计。”避免瀑布方法中的“大量提前设计”,只做最低限度的工作,这些团队最终获得了坏设计。实际上,敏捷宣言宣称,“不断关注优秀的技能和好的设计会增强敏捷能力”。敏捷的目的不只是速度,而是敏捷性。好的设计可以实现敏捷性。这实际上就是设计的目的,Rayner 援引Venkat Subramaniam 的话对此进行了佐证:“好的设计不是正确地预测了未来的设计,而是让适应未来的成本不那么高昂的设计。”

他指出,设计基本上是迭代的,这样一来就很容易包含到敏捷中。设计是一个发现未知并简洁地表达复杂观点的过程。由于你永远无法提前知道所有的一切,所以设计必然会随着时间变化。花些时间用来发现,并在交付的代码中表达新知识,这样会节省后续过程的时间,因为代码本身变得更加敏捷了。一种方法是“旋涡模式探索过程( whirlpool process of model exploration )”。在这个过程中,你反复使用新场景挑战已有的领域模型,提出新模型,并编写代码实现它。

Rayner 还列出了其他一些敏捷团队使用过的、从 DDD 的视角来看经常失败的方法。一个是认为不断地重构为好的设计已经够了。这可能会实现清理代码的效果,但 DDD 强调引入新概念。这些新概念不是从代码中出现的,因此无法仅仅通过重构创建出来,而是要在业务建模中形成。它们会增加业务价值,而重构,根据定义,并不改变软件的功能。

Rayner 提到,在 Scrum 中,一个定义好的“产品经理”角色很容易让团队中的其他人将其视为所有业务需求 / 知识的唯一中转。DDD 倡导,每个人都了解领域。这就是复杂之处,不是在问题的技术层面上。因此,为了实现一个好的设计,提高敏捷性和价值,交付团队中的每个人都需要了解领域。

查看英文原文 Paul Rayner Says DDD and Agile Can Coexist

2016 年 6 月 23 日 19:001386
用户头像

发布了 1008 篇内容, 共 317.0 次阅读, 收获喜欢 287 次。

关注

评论

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

深入了解 Rust 异步开发模式

lipi

rust 异步

JAVA,.NET项目开发难上手?Learun敏捷开发框架解君愁

Philips

Java 敏捷开发 .net core

新基建迎来风口 新人才仍有缺口

CECBC区块链专委会

人工智能 新基建 数字化基础

10万奖金等你拿!2020第四届易观OLAP算法大赛火热开启

易观大数据

开发任务管理分析报告

森林

controller-manager的主动驱逐

Geek_f24c45

Kubernetes k8s

消息队列之事务消息,RocketMQ 和 Kafka 是如何做的?

yes

分布式事务 RocketMQ kafak 事务消息

易观CTO郭炜:如何构建企业级大数据Ad-hoc查询引擎

易观大数据

数字资产钱包开发,深圳区块链理财钱包服务商

13530558032

数字化转型需要低/零代码平台的支持

代码制造者

低代码 数字化转型 企业信息化 零代码 编程开发

Vue+Springboot项目部署

ZRK

Vue 前后端分离 springboot 部署

OFD版式技术深度解读:卷首语

华宇法律科技

版式文档 OFD

Python 到底是强类型语言,还是弱类型语言?

Python猫

Java c++ Python 编程

NodeX Component - 滴滴集团 Node.js 生态组件体系

滴滴普惠出行

开发者的福音,LR.NET模块化代码生成器

Learun

Java 敏捷开发 .net core 计算机程序设计艺术 软件设计

Week12

一叶知秋

文件系统

Linuxer

USDT承兑商软件开发,区块链支付系统源码搭建

13530558032

合约跟单软件开发,合约跟单交易所系统开发搭建

13530558032

人民版权 获2020中国产业区块链创新奖

CECBC区块链专委会

区块链 产业发展 版权

数字人民币钱包短暂露面 金融诈骗伺机而起

CECBC区块链专委会

数字货币 钱包 货币

一文带你深扒ClassLoader内核,揭开它的神秘面纱!

我没有三颗心脏

Java ClassLoader java基础 类加载器

向云再出发:如数据般飞驰的内蒙古

脑极体

Redis 持久化--AOF

是老郭啊

redis redis持久化 aof

看百度技术专家如何深入研究,重复使用的代码经验——设计模式

周老师

Java 编程 程序员 架构 设计模式

数字货币交易平台搭建,去中心化交易所开发方案

13530558032

Spring整合WebSocket

牛初九

【译】Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases 上篇

花里胡哨

分布式数据库 异步 Amazon Aurora 日志驱动

Spring Boot中获取配置的一些方法

Geek_416be1

Spring Boot 2

OpenKruise:Kubernetes 核心控制器 Plus

郭旭东

Kubernetes 云原生 OpenKruise

Redis常见问题--单线程

是老郭啊

nosql redis 线程

Paul Rayner认为DDD和敏捷可以共存-InfoQ