写点什么

坚定推动 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:477979

评论

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

多面板文件管理器:QSpace Pro中文版

mac大玩家j

文件管理 Mac软件 文件管理器

MySQL 人脸向量,欧几里得距离相似查询

北桥苏

Python MySQL OpenCV dlib PyTorch

如何使用Python调用API接口获取淘宝商品数据

Noah

纯CSS实现魔法渐变边框卡片

南城FE

CSS css3 前端 用户体验

一台亚马逊EC2对开发者而言意味着什么?

申屠鹏会

Mac电脑快速切换工具 One Switch激活中文最新版

胖墩儿不胖y

Mac软件 切换工具 Mac软件切换软件

币安进军 Web3 钱包领域预示着几个重要的趋势和发展

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

Final Cut Pro 10.6.10 mac破解版下载

iMac小白

全球代理HTTP的使用范围?罗拉ROLA-IP表现突出

Geek_ccdd7f

NFTScan | 11.06~11.12 NFT 市场热点汇总

NFT Research

NFT\ NFTScan nft工具

ROLA-IP在HTTP海外IP代理市场的优势

Geek_ccdd7f

Vector Magic for mac 矢量图片转换工具

繁星

Vector Magic

Snagit for mac(屏幕截图工具) 2023.2.4中文激活版

mac

苹果mac Windows软件 Snagit 屏幕截图视频录制软件

ROLA-IP海外IP代理全球动态ip代理用途分析

Geek_ccdd7f

基于 PostgreSQL 构建 AI 电商产品图片相似度搜索方案

亚马逊云科技 (Amazon Web Services)

postgresql 向量数据库 生成式人工智能 Amazon SageMaker 大语言模型

纺织行业如何利用数智人力迈向新型工业化

用友BIP

数智人力

IntelliJ IDEA 2023.2.5最新汉化版 支持M1

繁星

Java 开发 IntelliJ IDEA 2023

先进制造业迎来利好新政:增值税加计抵减5%

用友BIP

税务

Spring高手之路16——解析XML配置映射为BeanDefinition的源码

砖业洋__

spring源码 BeanDefinition分析 Spring框架内部工作 XML配置文件

清华-用友数智化领导力项目正式开课!

用友BIP

数智化领导力

IPQ9574 vs IPQ9554 vs QCN9274 vs QCN6274 Industrial Applications|WiFi 7 Use Case

wallyslilly

ipq9554 qcn9274 qcn6274 ipq9574

从混乱到优雅:基于DDD的六边形架构的代码翻新指南 | 京东物流技术团队

京东科技开发者

架构 DDD 分层架构 企业号11月PK榜

Python标准库中隐藏的利器

EquatorCoco

Python 编程语言 标准框架

Enfocus PitStop Pro 2022 for Mac(pdf增强插件) v22.0.1378944永久激活版

mac

苹果mac Windows软件 Enfocus PitStop Pro Acrobat插件

第三期 |《实时洞察 智能运营一用友企业绩效管理白皮书》解读

用友BIP

企业绩效管理

Java表达式引擎选型调研分析 | 京东云技术团队

京东科技开发者

Java 后端 企业号11月PK榜 表达式引擎 Java表达式

IPQ8072: The future of high-performance Network Acceleration - Wireless Communications

wifi6-yiyi

5G wifi6 IPQ8072 6G

许多朋友问我有没有好用的海外代理IP

Geek_ccdd7f

使用Python调用API接口获取淘宝商品数据

Noah

网络安全专用产品有哪些?能一一列举出来吗?

行云管家

网络安全 防火墙 等保 安全运维

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