本文书接上回《技术Leader如何落地DDD(五)》,全系列合集《技术Leader如何落地DDD》。
背景
在经历了一段时间的实践和引导之后,团队已经在认知和行为上与DDD的核心价值观一致了:
认知上:
认同边界明确是最重要的事
理解保持边界明确意味着对复杂度的掌控
行为上:
用数量(聚合个数、聚合属性个数)来置换关系
用事件来处理聚合之间的相互影响
既然团队已经建立了DDD的核心共识,意味着改革的时机已经成熟,从本期开始,我们一起探讨如何爆改团队要让DDD实践收益最大化。
要想富先修路
俗话说,要想富先修路,技术Leader要想让团队最大程度地利用DDD产生收益,首先要做的,就是消除团队实践DDD的环境障碍,那么这个障碍是什么呢?我认为就是开发框架。
如同本系列开始的那样,要让团队开始DDD,就得先提供“事件组件”,解决工具上的问题,那么要让团队全面地拥抱DDD,就需要提供一套对DDD实践充分支撑的开发框架工具,借助这套工具,使得团队可以无负担地用代码实现业务模型设计。
建模设计与代码实现一致性
那么,怎样的工具才算对DDD实践充分支撑呢?我认为能够实现“建模设计与代码实现的一致性”的框架,才算对DDD实践的充分支撑。
我在《DDD建模后写代码的正确姿势(Java、dotnet双平台)》一文中,也强调过这个观点,那么如何理解“一致性”这个词呢?我认为核心有两点:
模型与代码的元素对应
模型与代码的含义一致
那么我们来看看建模设计时,我们会有哪些要素:
如果对应到代码,我们也应该有这些元素:
这里列出框架所需要支持的核心要素:
聚合与实体
命令与处理器
查询
事件与处理器
团队的开发框架一旦支持直接表达这些要素,意味着团队可以:
代码类型名称与建模设计保持对应
代码类型职责(功能)与建模设计保持一致
说白话就是:“怎么设计,就怎么写代码。”
可能的困难
在这一阶段,因为之前已经建立了比较好的认知共识,因此对于框架的变化本身,团队大概率是不排斥的,我认为核心的困难主要来自于两个方面:
框架易用性打磨需要足够充分,否则无法达成预期的效果;
项目节奏的契机比较难把握,尤其是老项目中,很难有机会去做;
因此,技术Leader需要一方面根据团队状况,对框架做充分的打磨,一方面不断地在行进中寻找应用的契机,最核心的,就是需要帮团队决策的勇气。
参考框架与文档
//参考文档
https://netcorepal.github.io/netcorepal-cloud-framework/zh/getting-started/development-process/
//.NET DDD 战术框架
https://github.com/netcorepal/netcorepal-cloud-framework
//Java DDD 战术框架
https://github.com/netcorepal/cap4j
期望的效果
当技术Leader在团队中引入新框架后,预期的效果应该是:
团队分析需求和建模设计时,充分使用前文所述的关键要素来表达业务
团队在建模设计时,不再需要讨论技术上怎么实现了业务流程了,模型设计约等于代码
这意味着,在建模设计的时候,大家脑子里的伪代码已经在自动输出了,消除了从业务到技术的二次翻译过程,从而大大提升了团队效率。
后续
有了工具,就有了基础和前提,俗话说无规矩不成方圆,实践DDD也是如此,没有一套可操作的执行准则,团队也无法很好地发挥工具的威力,下次我们将分享一套决策和行为原则,帮助技术Leader打造一套可执行的团队规范,使得团队最大程度地发挥效能。