写点什么

领域驱动设计与动态文档

  • 2015 年 6 月 22 日
  • 本文字数:1143 字

    阅读完需:约 4 分钟

创建文档是一件令人厌烦的工作,文档内容很可能是过期的,或者会产生误导。但某种新的思想能够同时改善你的文档与代码。在今年于伦敦举办的 DDD Exchange 大会的一场演讲中,Cyrille Martraire 为听众阐述了如何在进行领域驱动设计(DDD)时创建动态文档(living documentation)。

在 Martraire 看来,文档的目的就是为了将信息传递给他人、在将来进行参考以及为了应付可能会到来的合规检查(regulatory compliance)。DDD 关注的是领域知识,而事件风暴是一种捕获这种知识的方法,Martraire 认为这是一种能够有效地探索一个领域的途径。他还建议使用行为驱动开发(BDD)技术,通过对话及场景中的实例对行为进行文档化。通过使用类似于 Cucumber 的工具,可以将场景以代码的方式进行运行,这正是动态文档的第一个例子,它与实际的代码始终是同步的。

Martraire 表示,如果从 DDD 的角度来看待代码,那么边界上下文已经包含在这些代码之中了,只是这种包含是隐式的。通过为包或命名空间添加标注,他就能够声明与描述多个不同的上下文,而这些描述同样也是始终与代码保持同步的。他认为通过这种技术还能够为他带来一种非常有价值的良好副作用,即他能够描述不同的 DDD 概念,他将这一过程称为嵌入式学习。

按照同样的方式,统一语言其实也已经表述在代码之中了,包括类、接口和方法。Martraire 通过对与领域相关的部分添加标注,并且以某种处理过程对添加了标注的代码进行扫描,就生成了一份始终保持最新的活术语表。在他之前所参与的一个项目中,他就通过这种方式自动生成了一份术语表,并定期地发送给项目负责人,这在他看来是一个巨大的成功。

为了举例说明如何对设计进行文档化,Martraire 使用了一个多边形架构,其中某个边的内部只包含领域模型,而其它部分都在外部。这一模式已经实现了文档化,只需在代码中谨慎地遵循这一模式,就能够确保设计已隐含在代码之中。他再次通过对包或命名空间添加标注的方式创建了活图表,并保证该图表正确地反映出代码。

Martraire 在这一技术中还发现了一个重要的价值:如果你发现很难按照这种方式创建一个活术语表或者是其它类型的动态文档,这就是一个信号,它表示你实现 DDD 的方式很可能有错。这就意味着可以通过文档检查你的代码现状,并对代码加以改善。

Martraire 目前正在撰写一本名为《 Living Documentation 》的书籍,可在 Leanpub 上进行试读。

下一年度的DDD Exchange 大会预定于2016 年6 月10 日举办,现已开放注册。

查看英文原文: DDD and Living Documentation


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015 年 6 月 22 日 04:321476
用户头像

发布了 428 篇内容, 共 157.2 次阅读, 收获喜欢 27 次。

关注

评论

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

深入剖析go中字符串的编码问题——特殊字符的string怎么转byte?

Gopher指北

后端 string utf-8 Go 语言

Python 为什么不支持 switch 语句?

Python猫

Python 编程

第四周作业

极客大学架构师训练营

实用威胁建模指南(一)

亚伦碎语

敏捷 安全设计 系统安全 #威胁建模

如何高质量学习与正确运用设计模式

木香丘

学习 设计模式 实战

架构师训练营第四周学习总结

尹斌

入行架构师之前,这7项技能你要先了解一下

Java架构师迁哥

java安全编码指南之:方法编写指南

程序那些事

java安全编码 java安全 java安全编码指南

Hazelcast IMDG 带你瞬间进入内存计算的时代

张磊

分布式计算 内存管理 分布式缓存 分布式内存网格

架构师训练营第三周作业(9.28-10.4)

zjzj2017

spring-boot-route(九)整合JPA操作数据库

Java旅途

Java Spring Boot jpa

有这些要素,架构才完整

北风

架构 架构师之道 架构方法

单例模式

魏小龙

架构师训练营第 1 期第 4 周作业

好吃不贵

极客大学架构师训练营

Serverless 多云解决方案 Malagu

木香丘

云计算 Serverless 架构 云原生 Malagu

Redis-技术专题-基础介绍

浩宇天尚

爆赞!这份《Java核心宝典》绝对是面试复习的最佳选择

Java架构之路

Java 程序员 面试 编程语言

缓存服务-技术专题-解决方案

浩宇天尚

LeetCode题解:226. 翻转二叉树,递归,JavaScript,详细注释

Lee Chen

大前端 LeetCode

架构师1期-代码重构作业

ltl3884

极客大学架构师训练营

架构师训练营第四周作业

尹斌

架构师训练营第三周课后作业

Gosling

极客大学架构师训练营

甲方日常 26

句子

生活 随笔杂谈 日常

架构师训练营第三小结(9.28-10.4)

zjzj2017

Redis-技术专题- 热点Key如何解决

浩宇天尚

架构师训练营第 1 期第 4 周学习总结

好吃不贵

Malagu 框架介绍

木香丘

云计算 开源 Serverless 架构 框架

基于 Spring Boot 的企业级快速开发框架 BDF3

木香丘

架构 Spring Boot 可视化 后台管理系统

极客时间架构 1 期:第 3 周代码重构 - 学习总结

Null

发几张国庆的照片

亨利笔记

容器 k8s Harbor 镜像

使用 jsDelivr 免费加速 GitHub Pages 博客的静态资源(二)

mzlogin

jsDelivr CDN Jekyll GitHub Pages 个人博客

领域驱动设计与动态文档-InfoQ