BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 Jan Stenberg 关注 10 他的粉丝 ,译者 周元昊 关注 0 他的粉丝 发布于 2017年3月6日. 估计阅读时间: 3 分钟 | QCon北京2018全面起航:开启与Netflix、微软、ThoughtWorks等公司的技术创新之路!

亲爱的读者:我们最近添加了一些个人消息定制功能,您只需选择感兴趣的技术主题,即可获取重要资讯的邮件和网页通知

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

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

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

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

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

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

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

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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT