论模式在领域驱动设计中的重要性

  • Jan Stenberg
  • 周元昊

2017 年 3 月 5 日

话题:设计模式语言 & 开发架构

最近在阿姆斯特丹举办的领域驱动设计欧洲大会上,Cyrille Martraire在其演讲中谈论到模式的重要性时表示,了解领域驱动设计(DDD)之外诸多现存的模式很有必要。

Ward Cunningham因其第一个搭建了 wiki 网站而为大家熟知,但同时他也是第一批对模式进行描述的人。这第一批模式关注于信息完整性,Martraire 认为这些早期的模式都是分析模式,它们用于描述如何从业务层面来更好地理解问题。例如例外值模式,这个模式让开发人员可以从业务的角度来编写代码,而不用考虑特殊情况,如处理非法值或零值。另一个有意思的模式是诊断查询模式,这个模式认为一个对象应该能够描述其成为当前状态的详细过程,诊断功能可以被用来取代输出日志或查看故障的过程。例如,一个账户对象内有一百欧元,可以被追溯为由一笔美元以及一笔英镑相加而转换来的。

另一个模式的来源是四人组在 90 年代中期所著的《设计模式》。在这些模式中,Martraire 找出了四个对模型化领域中概念及关系特别有用的模式:

  • 组合模式,用于将对象组合成树形结构,可以让客户端以相同的处理方式来处理独立或组合的对象。
  • 解析器模式,用于分析特定语言中的某个语句。
  • 享元模式,使用共享来支持大量细粒度的对象。
  • 策略模式,将算法逻辑从其调用中剥离。

Martraire 在早期的职业生涯中也研究了Martin Fowler的《分析模式》一书。从这本书中他学到了一系列在零售银行、医疗、测量领域中使用到的新的模式。他认为通过学习各种模式并透彻了解其原理,就可以将它们应用到新的领域。然而,他强调,如果要获得进一步的理解,了解模式和其中理念发展的过程非常重要,而仅仅学习如今现存的模式是不够的。

如果你还不了解这些模式,那就该思考你是否认真对待了设计过程,或过于关注那些最新技术。一个例子是事件溯源(event sourcing),这个模式常被默认使用,这让一些只需要简单的增删改查模型就可以满足的代码,无谓地变得复杂。他建议花更多时间在领域模型的设计过程上,如果发现设计存在问题,那就多进行改进。Martraire 认为,如果你每次遇到问题,都倾向于创建新项目,你最终只会创造出你自己都无法理解的模型。最后回顾整个设计,你会发现它们都只是增删改查模型。为了训练你的技能,并了解更多复杂模型,可以研究成熟的遗留项目,在这些项目中你能找到深层次的领域模型。

Martraire 目前正在写《活文档(Living Documentation)》一书,其中介绍了如何利用注解来从代码中直接创建文档,用于描述领域驱动设计概念、用到的模式以及其他设计概念。

查看英文原文:The Importance of Patterns in DDD

设计模式语言 & 开发架构