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

简介:

在领域驱动设计欧洲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倡导,每个 人都了解领域。这就是复杂之处,不是在问题的技术层面上。因此,为了实现一个好的设计,提高敏捷性和价值,交付团队中的每个人都需要了解领域。

文章转载自 开源中国社区[http://www.oschina.net]

相关文章
|
8月前
|
敏捷开发 缓存 架构师
Apache 架构师总结的 30 条架构原则
Apache 架构师总结的 30 条架构原则
85 0
真下饭!字节技术官DDD(领域驱动设计)手册,拆解业务代码首选
至少20年前,一些顶尖的软件设计人员就已经认识到领域建模和设计的重要性,但令人惊讶的是,这么长时间以来几乎没有人写出点儿什么,告诉大家应该做哪些工作或如何去做。尽管这些工作还没有被清楚地表述出来,但一种新的思潮已经形成,它像一股暗流一样在对象社区中涌动,我把这种思潮称为领域驱动设计(domain-driven design)。
|
8月前
|
存储 设计模式 前端开发
MVC架构和DDD架构的区别?
最近在学习一个开源社区项目,第一次听说了DDD项目架构,于是通过搜索之后来分享给大家
|
设计模式 监控 安全
基于DDD的微服务设计和拆分要坚持哪些原则
基于DDD的微服务设计和拆分要坚持哪些原则
277 0
|
消息中间件 测试技术
DDD实践原则规范
DDD实践原则规范
233 0
|
架构师 安全
「技术架构」EA874:技术架构的原则和标准
「技术架构」EA874:技术架构的原则和标准
|
设计模式 缓存 Java
DDD之代码架构
这是一篇迟到的文章。这其实是我写DDD的第四篇文章。去年11月份左右我在个人网站上写了三篇关于DDD的文章,都是比较偏战略部分的。那个时候我还在一个正在使用DDD的项目上,也是我第一次真正开始深入使用DDD。
628 1
|
设计模式 JSON 缓存
|
设计模式 领域建模
DDD的模式与实践案例(1)
DDD的模式与实践案例(1)
1041 0
DDD的模式与实践案例(1)
|
设计模式
DDD的模式与实践案例(2)
DDD的模式与实践案例(2)
741 0
DDD的模式与实践案例(2)