9月7日-8日,相约 2023 腾讯全球数字生态大会!聚焦产业未来发展新趋势! 了解详情
写点什么

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

  • 2018-09-05
  • 本文字数:2287 字

    阅读完需:约 8 分钟

关键要点

  • 在将 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

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2018-09-05 18:241613
用户头像

发布了 731 篇内容, 共 422.2 次阅读, 收获喜欢 1988 次。

关注

评论

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

从字节跳动到火山引擎(二):私有云 PaaS 场景下的 Kubernetes 集群部署实践

字节跳动 云原生 #Kubernetes# 火山引擎

联邦计算在百度观星盘的实践

百度开发者中心

百度 联邦计算

欧洲杯与618:“夏季限定”MVP诞生记

脑极体

工信部发文将整治涉诈电话卡:打击网络诈骗必须釜底抽薪

石头IT视角

华为实习结束后,鹅厂和字节跳动递来的offer让我手足无措

Java 程序员 架构 面试

我看JAVA 之 线程同步(上)

awen

Java synchronized 管程

珠宝正品溯源平台,区块链珠宝溯源方案

13530558032

百度大规模Service Mesh落地实践

百度开发者中心

百度 service

5分钟速读之Rust权威指南(二十六)Drop

wzx

rust

Cilium 首次集成国内云服务,阿里云 ENI 被纳入新版本特性

阿里巴巴云原生

容器 运维 云原生

如何做好业绩管理?

石云升

职场经验 管理经验 6月日更

从最难的而立之年走来,三十而已 —— 2021 年中总结

清秋

成长与思考 年中总结

网络攻防学习笔记 Day51

穿过生命散发芬芳

网络攻防 6月日更

新华三亮相未来网络发展大会 共启国家重大科技基础设施(CENI)开放合作

科技热闻

百度后端二面有哪些内容,万字总结(一)

李阿柯

MySQL 面试 索引结构 索引优化

从字节跳动到火山引擎(三):替换 Spring Cloud,使用基于 Cloud Native 的服务治理

字节跳动 微服务 云原生 Spring Cloud 火山引擎

Swift在淘系的工程化应用和实践

阿里巴巴大淘宝技术

swift 大前端 编程语言 WWDC21

四川比特币矿机或全线关机,矿工跟矿机说:Bye,See you

CECBC

GraphQL 入门指南

PingCode研发中心

开发者 graphql

微信小游戏直播在Android端的跨进程渲染推流实践

JackJiang

微信 即时通讯 直播技术

原以为哈夫曼树、哈夫曼编码很难,结果大佬用6张图就讲明白了

Java架构师迁哥

区块链电子印章平台--加速政务数字化

13530558032

线程与线程池的那些事之线程池篇(万字长文)

秦怀杂货店

线程 线程池 并发

分布式事务框架seata落地实践

有道技术团队

分布式 大前端

slate-angular 正式开源

PingCode研发中心

angular.js 开源 angular

如何在 Vue 的计算属性中传递参数

devpoint

Vue vue2 6月日更

Flink Checkpoint 和 Large State 调优

Alex🐒

flink 翻译 flink1.13

案例 | 低代码助力生产制造业,扫平数字化升级“死角”!

优秀

低代码 生产管理系统

2021春招面试经历,阿里3轮技术面+交叉3面(已成功拿到offer)

Java 程序员 架构 面试

进击的云原生,为开发者提供更多可能性

阿里巴巴云原生

Flink State 和 Fault Tolerance(四)

Alex🐒

flink flink1.13

  • 扫码添加小助手
    领取最新资料包
“亲切照料”下的领域驱动设计_研发效能_Thomas Betts_InfoQ精选文章