HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

评论

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

【漏洞复现】Nodebb 被爆未授权拒绝服务攻击

我再BUG界嘎嘎乱杀

网络安全 漏洞 网安 漏洞复现

MySQL 8.0 字符集与比较规则介绍

Simon

MySQL

豆瓣评分8.6!破晓大牛仅用一份手册就把Web安全讲明白了!

我再BUG界嘎嘎乱杀

网络安全 WEB安全 网安

【YashanDB知识库】filter or改写问题

YashanDB

yashandb 崖山数据库 崖山DB

远程控制软件怎么选?向日葵功能齐全还不限制免费使用

编程猫

微前端父子应用及兄弟应用间组件或方法共享方案

京东科技开发者

系统整容纪:慢SQL之独家秘籍,离不可替代型人才更近一步

京东科技开发者

【论文速读】| 关于构建基于检索增强生成的聊天机器人的事实

云起无垠

论文图谱当如是:Awesome-Graphs用200篇图系统论文打个样

TuGraphAnalytics

AI写PPT的软件有哪些?这5款备受推崇的AIPPT工具值得推荐!

彭宏豪95

人工智能 PPT 在线白板 办公软件 AI生成PPT

Shutterstock完成对Envato的收购

财见

以小见大-B端图标设计沉思

inBuilder低代码平台

设计 图标制作

数业智能心大陆,你的专属AI心理专家

心大陆多智能体

智能体 AI大模型 心理健康 数字心理

企业选择IT外包服务的好处

Ogcloud

IT外包 IT外包公司 IT外包服务 IT外包企业 IT外包服务商

人工智能|RAG 检索增强生成

测吧(北京)科技有限公司

中国AI长卷(二):框架立基

脑极体

AI

【IT小知识】什么是工单?什么是工单中心?

行云管家

堡垒机 工单 IT 运维 工单中心

探索网络安全:浅析文件上传漏洞

我再BUG界嘎嘎乱杀

网络安全 漏洞 文件上传

巧用 API 接口,尽览京东商品详情

Noah

VMware虚拟机中安装Windows11系统的教程

理理

【论文解读】让我们逐步验证

合合技术团队

#科技 LLM模型

【实战分享】从新手到专家,六大神器加速你的代码人生

敏捷调度TASKCTL

vscode jenkins Postman TASKCTL #docker

Mac应用快速启动器:Alfred 5 for Mac 激活版

你的猪会飞吗

mac软件下载 Mac破解软件

【YashanDB知识库】数据库使用shutdown immediate无响应导致coredump

YashanDB

yashandb 崖山数据库 崖山DB

京东百万级调度系统(Buffalo)架构解密

京东科技开发者

基于Java+SpringBoot+Vue前后端分离毕业生实习与就业管理系统设计和实现

hunter_coder

后端开发

2024-07-24:用go语言,给定一个整数数组 nums,其中至少包含两个元素。 可以根据以下规则执行操作:选择最前面两个元素删除、选择最后两个元素删除,或选择第一个和最后一个元素删除。 每次操作

福大大架构师每日一题

福大大架构师每日一题

医院采购堡垒机厂商重点推荐-行云管家

行云管家

网络安全 医院 堡垒机 等保合规

异构智算,打赢智算时代「牧野之战」

脑极体

AI

fasterWhisper和MoneyPrinterPlus无缝集成

程序那些事

工具 AIGC

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