首页 > 极客资料 博客日记
学习真DDD的最佳路径
2024-08-26 21:30:06极客资料围观28次
本文书接上回《DDD是软件工程的第一性原理?》,关注公众号(老肖想当外语大佬)获取信息:
-
最新文章更新;
-
DDD框架源码(.NET、Java双平台);
-
加群畅聊,建模分析、技术实现交流;
-
视频和直播在B站。
假DDD的特征
在开始之前,考虑到目前关于DDD的资料非常多且杂,我们需要具备分辨的能力,确保不被误导。看过本系列文章的朋友,对我们是如何看待DDD的会有一定的感受,这里我们列举一下我们认为的假DDD的特征,供大家参考:
-
堆砌抽象词汇,让人不明觉厉的
-
说DDD只有高级开发者才适合的
-
说DDD很难落地的
-
说只有复杂项目才适合的
-
说只能凭经验的
适合人群
首先我们认为“领域驱动设计是一种价值观”,那么理解并能够实践DDD的前提,认可这种价值观,既然如此,说明第一步的起点,是没有门槛的,只要你主观上认同即可,所以我们认为DDD适合软件工程工作相关的各个角色来学习和实践,包括但不限于:
-
期望从事软件领域的在校学生
-
各个层级的软件工程师
-
产品经理
首先软件工程师得懂DDD,这是毋庸置疑的,我隐约有一种感觉,真正的DDD就是软件工程的唯一正解,不少后端老司机一直苦于随着时间的推移,系统代码快速腐化的问题,而DDD正是对抗这种腐化的底层逻辑,是软件工程的第一性原理。
对于学生群体,我接触的案例证明,对于软件领域的新人,反倒更容易理解和接受DDD,这是因为目前主流的软件设计指导,很多都指向了与DDD相反的方向,新人因为没有被这些信息所误导,没了先入为主的思维枷锁,很自然地容易接受更有收益的软件设计思想。
软件工程师最喜欢的产品经理,大概率是懂一些技术的产品经理,而如果对DDD的概念有所理解的产品经理,我相信在需求分析、产品设计、模型设计方面能够与工程师更容易相互理解并建立共识,大家一定还记得之前文章所说的“拟人化建模沟通法”,在这里更是能发挥巨大的作用,使得“需求-模型”的一致性得到更好的保障。
学习路径
下图展示了一个学习的循环迭代,我认为可行几点如下:
-
学概念,通过系列文章、视频,构建基本概念认知
-
学实践,使用DDD框架做代码练习
-
做验证,一个教练指导并不断地实战体验,迭代认知和行为
学概念
我们认为DDD的概念是具体的,是容易理解和实践的,如果你有通读本系列的前文,那么一定会有所感受,《老肖的领域驱动设计之路》,其中关键的概念观点包含但不限于:
-
领域驱动设计是一种价值观
-
DDD原则
-
边界明确是最重要的事
-
一致性比正确性更重要
-
DDD是软件工程的第一性原理
-
系统的复杂度来自元素的数量和元素之间的关系
-
复杂度守恒定律
-
拟人化建模沟通法
-
不要复用
-
万能模型之“命令-事件”
-
如果写代码别扭,大概率是建模出了问题
学实践
学实践,就是不断地建模设计、代码实现,目前我们已经为Java、.NET生态分别提供了DDD战术框架,基于战术框架,并配套了工程模板,期望能够帮助你的团队在没有技术负担的状态下体验DDD带来的优势和收益,从而增强团队的DDD认知:
Java:https://github.com/netcorepal/cap4j
.NET: https://github.com/netcorepal/netcorepal-cloud-framework
关于教练
首先教练不是必须的,但一个好的教练,可以让你大大加速对DDD的认知和应用,教练的核心作用就是:
-
引导认知理解
-
教授实践方法
-
验证学习成果
那么对于一个好教练,我认为最关键的就是:能够判断决策(需求分析、建模设计、代码实现)是否符合DDD价值观。要做到这点,那么一个好教练大概率满足以下特征:
-
对DDD的理解准确
-
有实践的成功经验
哪里找一个好教练呢?(广告时间)在你眼前就有这么一位,关注我,我在直播间就是扮演教练的角色,欢迎互动交流。
视频与直播:
https://space.bilibili.com/6733407
如何判断成果
学习过程中,很重要的就是成果的正向反馈,关于DDD的学习,以我的经验来看,虽然无法给出明确的可量化的指标,但下面几点可以帮助你从主观上判断是否有进展:
-
对需求和系统有掌控感了
-
需求-模型-代码越来越一致了
-
写代码感觉丝滑了
-
代码BUG率有显著的改善
最后
欢迎交流实践经验,持续提高开发者的幸福感。
标签:
相关文章
最新发布
- Nuxt.js 应用中的 prerender:routes 事件钩子详解
- 【问题解决】Tomcat由低于8版本升级到高版本使用Tomcat自带连接池报错无法找到表空间的问题
- 【FAQ】HarmonyOS SDK 闭源开放能力 —Vision Kit
- 六、Spring Boot集成Spring Security之前后分离认证流程最佳方案
- 《JVM第7课》堆区
- .NET 8 高性能跨平台图像处理库 ImageSharp
- 还在为慢速数据传输苦恼?Linux 零拷贝技术来帮你!
- 刚毕业,去做边缘业务,还有救吗?
- 如何避免 HttpClient 丢失请求头:通过 HttpRequestMessage 解决并优化
- 让性能提升56%的Vue3.5响应式重构之“版本计数”