“亲切照料”下的领域驱动设计

阅读数:941 2018 年 9 月 5 日

关键要点

  • 在将 DDD 引入新团队时,请从有界的上下文开始——将大问题分解为可管理、可解决的小问题。撇开繁文缛节,动手去做。
  • 了解团队成员的能力,以便能够成功地指导他们,这与本能和同理心有很大关系。仔细聆听、尊重、不评判、和善,这些都是非常重要的。
  • 人们抵制 DDD,是因为他们认为 DDD 的内容太多了,或者会对他们当前的流程造成太大破坏。解决小问题是可以帮助人们获得对 DDD 信任的一种很好的方式。
  • 领域建模是一门艺术,而不是一门科学,因此,出现碰壁或突然改变方向的情况并不罕见。团队需要一个熟悉建模的教练,让你在整个过程中无需担心视角的变化。

在 2017 年探索 DDD会议上,Serial DDD 倡导者 Julie Lerman 谈到了如何通过“亲切照料”进行领域驱动设计。InfoQ 采访了 Lerman,谈论了她如何向新客户介绍 DDD 并帮助他们取得成功。

InfoQ:大多数 DDD 从业者都记得他们是如何首次引入域驱动设计的。你的 DDD 起源故事是怎样的?

Julie Lerman:不管你信不信,我必须感谢 Jimmy Nilsson!多年前,当微软发布 LINQ 和 Entity Framework 时,发生了一些争议。我和 Jimmy Nilsson 在 InfoQ 上接受了一次采访,他被问到他对 LINQ 和 Entity Framework 的看法——这是我非常感兴趣的一个观点。在采访结束时,Jimmy 被问到一个问题:“你最喜欢的书是什么?”他回答是 Eric Evans 的《领域驱动设计》,Jimmy 说它读起来就像诗歌一样。那时我正在为 O’Reilly Press 写一本关于 Entity Framework 的书。这是我的第一本书,我真的很想知道让一本科技图书读起来像诗歌的意味着什么。所以我拿起了 Eric 的书,书中涉及的第一个讨论话题是关于领域专家参与度的重要性——这对我在客户方面取得的成功来说至关重要。我喜欢了解他们的业务,并与我的很多客户建立了长期稳固的关系。

InfoQ:DDD 涵盖了很多主题。当你开始与新团队合作时,你是如何引入 DDD 的,以及如何避免向其他人灌输太多新概念?在这方面是否存在一些教学技巧?

Lerman:我通常是在他们正在重构或更换遗留应用程序或正在开发应用程序时加入他们的,而且我只在那里短暂停留,所以我会尽可能快尽可能多地让他们接受 DDD。我从有界的上下文开始——将他们的大问题分解为可管理可解决的小问题。我甚至在一开始都没有使用术语。然后我从松散的有界上下文中选择一个简单的目标,并分析它,然后识别出领域模型的不同部分——一次一个,而不是一次性完成。我在一开始就使用新概念,不担心术语问题。从我个人的经验来看,大脑会被术语锁定。所以,我找到了更简单的方法引入新主题——更加明显的类比方式。最后,我再把术语添加进去……聚合、聚合根等,并向他们解释使用这些术语的重要性,这样每个人都可以达成共识。对于无所不在的语言来说,这也是一个很好的选择!

InfoQ:Evan 那本书的副标题是“解决软件核心的复杂性”。康威定律意味着复杂的应用程序通常需要复杂的组织和团队来支持它们。DDD 的概念,例如有界上下文,是否有助于理解和指导团队?

Lerman:了解团队成员的能力,以便能够成功地指导他们,这与本能和同理心有很大关系。仔细聆听、尊重、不评判、和善,这些都是非常重要的。但是,我也很依赖直觉和经验来“读取房间”。我的星座是天秤座,所以我的性格主要关于平衡和调解。当我与团队合作,并且需要以积极的方式继续前进时,对我的客户有很大的帮助。我认为这与 DDD 人性的一面很有关系——与客户密切合作以了解他们的业务,识别他们的问题并获得他们对你的信任,最后解决所有的问题。这就是最初 Eric 的书吸引我的原因。DDD 的技术或战术设计部分只是锦上添花!

InfoQ:你有听到哪些反对采用 DDD 的争论?你是如何回应他们的?

Lerman:有一些观点认为 DDD 需要学习的东西太多了,这会对我们的流程造成太大破坏,因为需要太多的重新思考、重构和时间。

我回到了“解决小问题”的方法——寻找机会通过小投入获得大利益。

InfoQ:如果你只有两三天的时间来引入 DDD 和指导团队,你会怎么做?你的目标是什么,以及如何优化时间以最大化实现这些目标?

Lerman:我首先会想知道他们在做什么,他们的目标是什么以及他们担心什么——显然是某种东西,否则他们就不需要我加入。然后我就开始进行神奇的“把大问题分解成小问题“,从这些问题中挑选一些解决方案,然后对其进行建模。我最常帮助他们进行遗留系统的替换,我们在白板上进行建模。建模是一门艺术,而不是一门科学,因此,因此,出现碰壁或突然改变方向的情况并不罕见。对于那些熟悉建模并且在整个过程中不担心视角变化的人来说,体验这一点对他们有好处。我出于同样的原因在那里做一些群体编程。我很清楚我们可能会遇到哪些技术问题,因此我可以指导他们完成。

InfoQ:对于试图开始使用 DDD 的人,你有什么建议吗?

Lerman:很多人通过专注于技术软件实现(称为战术设计)开始他们的 DDD 之旅,战略设计对于 DDD 来说至关重要,并且当你与领域专家合作,了解他们的领域和计划你的系统的时候,战略设计应该是放在第一位的。确保自己至少对 DDD 的广度、目标、它的用武之地以及在哪些场景中会用力过猛多需要有一定的了解。

关于受访者

Julie Lerman 是微软区域总监和微软 MVP。她主要从事全球软件团队的软件教练和顾问方面的工作。你可以在世界各地的用户组和大会上看到 Lerman 呈现的有关 Entity Framework、域驱动设计和其他有趣的主题。Lerman 在 thedatafarm.com/blog 上发表博文,是备受好评的“Programming Entity Framework”一书的作者、MSDN 杂志 Data Points 专栏作者和 Pluralsight.com 热门视频的作者。

查看英文原文DDD With TLC

收藏

评论

微博

发表评论

注册/登录 InfoQ 发表评论