BT

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

在进行领域驱动设计时要避免的十个常见错误

| 作者 Jan Stenberg 关注 34 他的粉丝 ,译者 邵思华 关注 3 他的粉丝 发布于 2015年7月15日. 估计阅读时间: 3 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

Daniel Whittaker在最近的一篇帖子中表示:在进行领域驱动设计(DDD)时,缺乏与领域专家的互动是一种常见的错误,而如果能够尽早发现并解决这一问题,或许能够避免团队无谓的时间浪费。在这篇帖子中,Daniel共列举了十种他发现开发者经常会犯的错误。

让持久化或数据存储问题影响模型的设计。通过使用战术模式,例如聚合根,能够简化模型,并将相关概念与对基础设施的关注面相互分离,例如数据存储等等。如果在没有经过与领域专家进行交流的前提下贸然开始数据架构或数据模型的设计,可能会导致所创建的代码是基于某个关系型模型,而不是基于某个领域模型的。而在类似话题上,Stefan Tilkov也在先前的一篇文章中对于在企业中使用标准化数据模型的方式提出了警告,这种方式可能会导致模型中充满了可选的特性以及奇怪的行为。

缺乏与领域专家的交流。DDD的核心实践之一就在于通过与领域专家进行交谈,从而以他们的角度对于问题领域进行理解。而行为驱动开发(BDD)实践则强调与领域专家通过对话的方式创建行为的实例。对此,Konstantin Kudryashov曾专门写过一篇如何将BDD与DDD实践相结合的文章。

忽视领域专家的语言。DDD的另一个核心实践在于创建一套通用语言,并与领域专家共享。这套通用语言必须使用在讨论过程中,同样也必须反映在代码中,例如类与方法的名称。

没有鉴别出边界上下文。解决复杂问题的常见方式是将其分解为多个小问题。而边界上下文就是为了将一个大的领域分解为多个小的子领域而出现的,每个边界上下文将负责处理领域中的一个内聚的功能。这一点同样也是微服务的核心概念,在今年的DDD Exchange大会的主题演讲中,Eric Evans专门对此展开了讨论。

使用贫血模型。这是一个说明团队并没有正确地使用DDD的信号,也暗示着建模过程的失败。一个贫血模型第一眼看上去与真正的领域模型非常相像,例如它们同样使用了正确的名称。但问题在于贫血模型中的类几乎丢失了所有的行为,而变成了只包含单纯的getter与setter属性的容器。

Whittaker所认识到的另外五种常见的错误在于:

  • 没有让边界上下文随着对领域的见解加深而相应地作出改变。
  • 将所有逻辑都设想为领域逻辑。
  • 过度使用集成测试。
  • 将安全性视为领域的一部分(除非你本身设计的就是一种安全性领域)。
  • 过度关注基础设施。

Whittaker最提到的最后一个错误则是忽视了事件风暴的作用,这是由Alberto Brandolini所创建的一种专注于事件的设计过程。Brandolini的想法是,通过将所有的项目干系人都集中在一个房间内,为他们提供无限的空间进行建模工作,并让他们用贴纸的方式写出所有的领域事件。这种方式在几个小时之内就能够为某个问题领域创建出一套非常出色的模型。

查看英文原文:10 Common DDD Mistakes to Avoid

评价本文

专业度
风格

您好,朋友!

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

获得来自InfoQ的更多体验。

告诉我们您的想法

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

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

为什么 开源代码很少用 领域驱动设计 by 饭 哥

大家都说好, 为什么 开源代码很少用 领域驱动设计

领域驱动设计适合解决什么问题呢? by yu q

个人认为,更适合领域已经成熟,有大量痛点,有失败经验的场景,例如,制造业,传统服务业,传统管理领域。而对于新兴行业和创新领域,是市场验证的阶段,领域变化和战略策略变化太快,领域和边界一直不稳定,并不适合使用领域驱动

允许的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通知我

2 讨论

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


找回密码....

Follow

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

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

Like

内容自由定制

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

Notifications

获取更新

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

BT