写点什么

坚定推动 DDD 一年后,去哪儿网如今怎么样了?

  • 2022-07-28
  • 本文字数:4936 字

    阅读完需:约 16 分钟

坚定推动 DDD 一年后,去哪儿网如今怎么样了?

嘉宾|郑吉敏

作者|贾亚宁


微服务盛行之后 DDD 又再次回到我们的视野之中,并一度成为各大公司竞相投入的重地。DDD 指的是领域驱动设计,是一种架构设计方法论,帮助我们拆解业务、划分业务、确定业务边界,继而可以更好地实现技术架构的演进。


DDD 一般包含两个方面:战略设计和战术设计;战略设计一般从业务视角出发,战术设计则从技术角度出发。一个完整的 DDD 首先会在战略设计部分建立领域模型,在战术设计部分进行技术实现和落地。那如何才能设计一个和业务匹配度更高的领域模型,如何更好地推动技术实现落地呢?



当下 DDD 的热度不减,各大公司纷纷进场,那它是实现技术架构演进的万能解药吗?究竟什么样的业务适合 DDD,如何避免盲目推进呢?当前成功落地案例少之又少,哪里去寻找合适的落地参考呢?


出于对以上问题的好奇,我们特地采访了去哪儿网机票目的地事业群技术总监郑吉敏老师,他是去哪儿网的技术委员会委员、业务架构 SIG 负责人,负责酒店报价中心团队和业务架构组。在 2020 年金项奖评选中主导的“对内 DDD 对外 API 驱动的酒店报价业务重塑”项目获得了 CEO 特别奖,也曾在多个业内顶尖技术大会进行分享。郑吉敏老师也在积极地推动技术品牌的建设,关于如何推广技术品牌的问题我们也可以得到一些启发。


同时,郑吉敏老师也是 3 月初上线的 QCon+ 案例研习社去哪儿网 DDD 落地实践」专题的出品人,带队来分享去哪儿网内部多业务 DDD 落地的最佳实践。因此我们针对 DDD 落地和技术品牌的建设推广相关问题对郑吉敏老师进行了采访,一起来看看他的实践和思考吧。

InfoQ:你最近在负责什么样的工作呢?


郑吉敏:我目前的工作主要由两部分组成:


  1. 负责酒店报价中心团队和业务架构组


当大家使用“去哪儿旅行 App”预定国内酒店时,会看到酒店售卖房型及对应的价格和优惠,这部分对应的后端技术团队就是我负责的,我们主要完成国内酒店定价业务和营销业务的技术承接。同时,我还会结合业务变化对整体架构进行把控和优化,通过这些来做产研提效的工作。


2. 技术委员会相关的事情,包括业务架构兴趣小组的日常运营、业务线重点项目的技术方案评审、技术品牌建设等。


最近我牵头将 2021 年公司内部几个不错的 DDD 落地案例在“极客时间 App”的 QCon+ 案例研习社上进行了分享,希望能给大家带来启发。同时大家也可以关注 B 站上“Qunar 技术大本营”,那里有我作为出品人在公司内部出品的多门技术系列课,比如“DDD 领域驱动设计”、“高并发解决方案”等。


这两部分工作相得益彰,前者为后者提供了大量的理论实践素材,后者能很好地展现前者的价值,并反过来指导前者更好地开展业务。

InfoQ:在推广 DDD 的工作中,你有遇到过什么困难吗?可以具体分享一下吗?


郑吉敏:去哪儿网内部推广 DDD 其实是高层自上而下推进的,要说困难,我感觉比较深刻的是一定要有团队能成功落地 DDD 并能输出成功经验,才能保证整体推广的顺利进行。


从我的角度上看,我认为要推广 DDD 有两个关键点:


  1. 公司层面的支持和重视


对一个核心业务进行 DDD 实践,如果想要做得彻底,通常需要几十人日甚至更多资源投入。这么大力度的成本投入,如果没有公司层面的支持和重视,是很难开展的,甚至可能开展过程中被强制叫停。


  1. 有成功经验的指导


2020 年我主导的酒店报价 DDD 重构项目中,我们就花了很大精力完成战略设计阶段、战术设计阶段、系统实现阶段的关键经验总结及思考。在公司内外部大会分享时,每次都能吸引很多听众,有一部分人想学习 DDD 思想,其余的大部分人都希望能在更多的成功经验指导下实际落地 DDD。DDD 失败的例子太多了,有成功经验指导,很多人才敢放开手脚去做,这样也更容易成功。公司内部也是有了多种 DDD 实践经验分享之后,更多的业务团队才开始去落地,这也是我们公司内部在 2021 年有多个团队能成功落地 DDD 的主要原因。


实际落地 DDD 会遇到各种各样的困难,以我自己负责的自下而上的业务重塑的案例,给大家具体分享一下系统实现阶段遇到的问题及应对方案


  • 新产品需求的应对


首先我们需要明确,新模型的上线必须要保证过程中发布的需求都能跟着上线,因此本质上在新模型上做重复开发是必须的。新模型理论上有很大优势,正好可以借助新需求去验证是否能达到提效的目的,这样开发团队可以提前看到新模型的适应性,也可以在系统实现阶段提前明确新模型上线后的效果(实际对比发现提效明显),这样反而可以在过程中提升开发团队的士气,树立一定能成功的信念,而不是强制把一些需求直接压下去。


  • 额外产生需求的应对


这个主要根据价值、优先级、工时等多方面因素,来决定是否在本次需求里做。比如,本次重写导致之前的自动化 case 都用不了了,由于自动化 case 对我们系统重构后的验证有关键作用,因此就需要按照新模型的设计完全重写自动化 case。再比如,我们发现有很多过滤逻辑需要从不同的服务及流程里取数据,较好的做法是搭建一个酒店禁售系统来汇总,但是这个属于重要不紧急的任务,于是我们就计划在当前项目上线后再单独跟进。


  • 计划投入的人力被其他需求抢走的应对


这是个最难的挑战。进入系统实现阶段从计划投入 6 人到只能投入 4 人,于是加班就变成必然,这里需要额外做很多协调工作。首先开发团队和测试团队达成共识,测试团队提前进入,优先测试已经开发及自测完成的内容;开发团队根据优先级进行开发,对于优先级低或者工具类型的功能点,可以放到提测之后开发,不需要完全保证在提测日全部开发完成。这样一来,大家心里压力会小很多。同时,整个过程中要让团队不断认可这个项目的价值,这样大家才有动力全力去推进完成项目。最终,整个项目提前一天完成全量且没有出现故障,我们整个团队的士气也得到了空前的高涨。

InfoQ:DDD 的落地有哪些必须满足的条件吗?如何才能高效落地 DDD?


郑吉敏:DDD 落地核心包含三个过程,战略设计阶段、战术设计阶段、系统实现阶段。系统实现阶段主要偏向于实现已确定的方案,重点做好项目管理;战术设计阶段更多偏向于基于近乎确定的需求制定模型和方案,掌握好 DDD 的一些基本概念(域、聚合等)及规则,问题也不大;战略设计阶段是整个落地的基础,只有战略设计阶段做到位、做彻底,后面两个阶段才有意义。


DDD 战略设计


这里我们总结了做好战略设计阶段的一些必要条件,可以概括为【两个前提】、【一个原则】【一个方法】,具体为:


  • 两个前提:这个主要是对领域专家角色的要求,本质上是为了明确现状并能规划未来。


a. 对核心业务运营的逻辑有深刻的了解。

能输出核心业务玩法和未来的规划,这样对业务玩法的讨论才会有明确的方向,最终制定的模型才能满足当前业务的诉求和未来调整的规划。有了这个前提,就不会讨论出一些大家谁都不知道会不会发生、也没人敢拍板的场景。


b. 对现有业务需求的来龙去脉有所了解。

明确核心业务诉求及限于当前架构等各种因素采用的业务玩法,这样就可以有目的地进行改善。


  • 一个原则:业务原子原则。

基于业务原子,容易划清业务边界避免业务职责重叠、过耦合。从根本上说,业务的划分应该到业务原子级别。做到了上面说到的两个前提,业务原子其实并不是难事。


  • 一个方法:通过业务本质保证业务原子。

寻找业务本质的方法,可以基于业务开展的目的。任何明确的业务都有属于自己的玩法,开展这项业务也一定是有实际的目的,玩法根本上是要为目的服务的,目的是玩法最终希望表现的结果。只有抓住业务开展的目的,从根本上了解业务的本质和玩法,才能保证最终业务边界是基于业务原子划分的。


在明确上面提到的这些必要条件后,加上充足的讨论,才能最终完成这个阶段目标:对业务理解达成共识。这些会让沟通变得更容易,目标变得更明确,落地执行更有效率,后续迭代更有规划,团队也更容易创造出更多价值。

InfoQ:目前你们公司推进 DDD 的成果如何?你认为哪些业务适合 DDD,哪些不适合呢?


郑吉敏:公司在 2020 年开始大力推进 DDD,我自己主导的 DDD 项目在 2020 年的金项奖评选中获得了 CEO 特别奖,之后我们在公司内部尝试以技术系列课的形式去分享 DDD 的落地经验。2021 年多个业务线借助 DDD 落地也都取得了不错的业务成果,典型的比如酒店订单交易、酒店基础数据、机票主站、服务平台业务、公共会员卡业务等,这些具体的实践过程都已经分享在了 QCon+ 案例研习社中,大家可以去看看。


去年我们的 DDD 落地经验也登上了多个业界顶尖技术大会,一些公司看到我们的 DDD 成果还主动邀请我们去他们公司内部做 DDD 落地的分享。2021 年金项奖评选中 Qunar 的技术委员会获得了 CEO 特别奖,这里面 DDD 的成果及基于 DDD 做的分享为去哪儿技术品牌影响力提升做出了突出贡献。


当然 DDD 不是万能的,它主要用来解决复杂领域的问题,建议核心业务使用,而不是非核心业务。如果没有明确的领域专家(领域专家可以由多个团队的核心人员组成),那么也不建议去直接进行 DDD 落地。实际开展 DDD 时,建议以业务重塑为主、系统重构为辅,避免纯技术重构。

InfoQ:在你看来,技术影响力对一家公司而言有什么价值?


郑吉敏:技术影响力对公司非常重要,我结合去哪儿网从对内和对外两方面来说一下:


  • 对内:随着公司技术影响力的提升,我们内部有越来越多的技术人员站出来去打造影响力。内部分享是很容易搞起来的,技术同学们愿意去分享自己的经验和总结,这对于提升一线开发同学的技术能力、提升公司的综合技术水平都非常有效,也能间接地支持业务的发展,提升技术人员的幸福感。去年我们公司一共组织了 282 次主题分享,包括各类内部技术分享、外部输出、应届生课程、行业大会、在线直播、B 站视频、文章输出等,总计涉及人次超过 30 万。


  • 对外:公司不断在业界发声,可以获得更多和外界交流及交换资源的机会,也推动更多外部开发人员认识去哪儿网。目前,很多技术大会都能看到我们公司的分享,我们也会主动做一些直播分享并上传到 B 站“Qunar 技术大本营”供大家长期观看学习。得益于这些,也有多家公司邀请去哪儿网技术人员来交换分享,大家拿出各自擅长的话题去对方公司交流,互相学习、共同进步,这种效果非常好。公司间也可以联合创立类似 ITCP 联盟这样的组织促进合作持续进行。

InfoQ:你认为如何才能提升公司的技术影响力?对于管理层而言,至少需要具备什么能力?


郑吉敏:对于管理层而言,我认为需要有这些能力:


  • 积极开放的心态

  • 敏锐的行业洞察力

  • 坚韧的性格

  • 不拘一格降人才的识人用人格局


这里主要是保持开放的心态,积极地关注行业变化、技术革新,敢于引入潮流的思想和技术;遇到困难和挑战很正常,要坚定地去解决,并能在这个过程中,识人用人,借助这些事情去历练团队,最后也要做好总结和经验分享。


提升公司的技术影响力,我们是这样做的:


  • 微信公众号技术文章分享:尽量定期发表,遇到文章产出少时,可以基于一些分享邀请相关分享人输出文章

  • 内外部技术大会分享:举办内部技术嘉年华、出品内部技术系列课以及报名参加业界技术大会分享等

  • 公司间技术交流:包括互访做技术分享、搭建 ITCP 联盟定期举办分享活动等


做影响力是有马太效应的,做得好和不做的差距会越来越大,持续地去做,也许当前较为棘手的问题很有可能在不久的未来变成自己的优势。

InfoQ:目前你主要做的是管理工作,那你想对初入管理 / 致力于转行做管理的技术人说写什么呢?


郑吉敏:初入管理或者刚做管理,确实有一些需要注意的地方,简单分享一下:


  • 心态准备

初入管理,首先要调整自己的心态,将个人产出转变为领导团队产出。很多初级管理者,尤其是技术人员初做管理,很容易和之前的工作状态一样专注个人的产出。


  • 不断学习

初级管理者需要不断地学习基础管理理论,同时持续丰富个人管理工具方面的储备。这个过程中可以获得很多解决问题的方法,看待问题的视角也会不断变化和提升,很多管理方面的问题自然就容易解决了。


  • 内外兼修

初级管理者依旧需要关注技术方面的不断提高,同时持续加强对业务的深入理解,这些对于团队方向的把握和日常的决策都很重要。


嘉宾简介


郑吉敏 去哪儿网 机票目的地事业群技术总监


2019 年 8 月入职去哪儿网,机票目的地事业群技术总监、技术委员会委员、业务架构 SIG 负责人,负责酒店报价中心团队、业务架构组。2020 年金项奖评选中主导的“对内 DDD 对外 API 驱动的酒店报价业务重塑”项目获得了 CEO 特别奖。2021 年获得技术品牌最佳贡献奖,曾在 QCon、Top100、CSDI、SACC、MPD 等大会做过技术分享。

2022-07-28 15:477948

评论

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

得物技术浅谈深入浅出的Redis分布式锁

得物技术

redis 分布式 分布式锁 CAP 一致性

基于场景文字的多模态融合的图像分类

华为云开发者联盟

计算机视觉 图像分类 场景文本 图像视觉 多模态融合分析

稳定性领导者!阿里云获得信通院多项系统稳定性最高级认证

阿里巴巴云原生

阿里云 云原生 可观测 性能压测 获奖

好的每日站会,应该这么开 | 敏捷开发落地指南

阿里云云效

云计算 阿里云 敏捷开发 研发敏捷 每日站会

TiFlash 源码阅读(一) TiFlash 存储层概览

PingCAP

深入微服务-SpringCloud调用组件Feign

janyxe

spring Spring Cloud Feign OpenFegin

【IT运维】如何又快又好的进行数据备份?

行云管家

运维 快照 数据备份 IT运维 行云管家

ArkUI框架又有哪些新增能力?

科技汇

头一次见这么牛的的SpringBoot从入门到实战文档

Java架构追梦

Java spring 程序员 后端开发

TiDB 查询优化及调优系列(二)TiDB 查询计划简介

PingCAP

IOS技术分享| ARCallPlus 开源项目(二)

anyRTC开发者

ios 开源 音视频 移动开发 呼叫邀请

面试突击43:lock、tryLock、lockInterruptibly有什么区别?

王磊

Java 面试题

短短6小时,AI设计出40000种毒气分子,很多毒性远超战用神经毒剂

图灵教育

AI

等保2.0国家标准是什么?与等保1.0有啥变化?

行云管家

网络安全 等保 等级保护 等保2.0

为什么 Rust 是 Stack Overflow 最受欢迎语言?

非凸科技

c++ rust 性能 Stack Overflow 内存安全

不要再焦虑了,进大厂真的没你想象的那么困难

Java架构追梦

Java java面试 后端开发

java培训MySQL一次性插入多行数据的操作

@零度

Java MySQL

netty系列之:protobuf在UDP协议中的使用

程序那些事

Java Netty 程序那些事 4月月更

一文掌握 Docker 技术体系

博文视点Broadview

分享一个JDK批量异步任务工具Completion Service,超好用

华为云开发者联盟

jdk 线程 异步 CompletionService 批量异步任务工具

无聊科技正经事周刊(第4期):理性囤货与人工智能预测

潘大壮

程序员 科技 行业趋势 科技周刊

作为一名iOS开发者—面对音视频这个新风口应该怎样学习才能乘风而起?

iOSer

ios 音视频 ios开发 OpenGL ES 音视频技术

毕业总结

孙强

#架构实战营

浅谈小程序开源业务架构建设之路

百度Geek说

小程序自动化测试框架原理剖析

百度Geek说

小程序 百度

架构实战营 - 方案设计文档模板

华仔

架构实战营 文档模板 方案设计

Enhanced SWAP内存管理 OpenHarmony构建新的内存管理优化方案——ESWAP

科技汇

分布式数据对象:超级终端的"全局变量"

科技汇

10 个 web 在线前端资源,优雅永不过时~

前端 网页设计 在线资源

小微企业如何在10分钟内实现持续交付

阿里云云效

云计算 阿里云 研发管理 持续交付 研发团队

OneFlow获得首届“全国颠覆性技术创新大赛”最高奖

OneFlow

深度学习 技术创新

坚定推动 DDD 一年后,去哪儿网如今怎么样了?_QCon+_Alice_InfoQ精选文章