首页 > 其他分享 >学习真DDD的最佳路径

学习真DDD的最佳路径

时间:2024-08-26 20:04:10浏览次数:9  
标签:教练 路径 建模 实践 最佳 软件工程 代码 DDD

本文书接上回《DDD是软件工程的第一性原理?》,关注公众号(老肖想当外语大佬)获取信息:

  1. 最新文章更新;

  2. DDD框架源码(.NET、Java双平台);

  3. 加群畅聊,建模分析、技术实现交流;

  4. 视频和直播在B站。

假DDD的特征

在开始之前,考虑到目前关于DDD的资料非常多且杂,我们需要具备分辨的能力,确保不被误导。看过本系列文章的朋友,对我们是如何看待DDD的会有一定的感受,这里我们列举一下我们认为的假DDD的特征,供大家参考:

  1. 堆砌抽象词汇,让人不明觉厉的

  2. 说DDD只有高级开发者才适合的

  3. 说DDD很难落地的

  4. 说只有复杂项目才适合的

  5. 说只能凭经验的

适合人群

首先我们认为“领域驱动设计是一种价值观”,那么理解并能够实践DDD的前提,认可这种价值观,既然如此,说明第一步的起点,是没有门槛的,只要你主观上认同即可,所以我们认为DDD适合软件工程工作相关的各个角色来学习和实践,包括但不限于:

  1. 期望从事软件领域的在校学生

  2. 各个层级的软件工程师

  3. 产品经理

首先软件工程师得懂DDD,这是毋庸置疑的,我隐约有一种感觉,真正的DDD就是软件工程的唯一正解,不少后端老司机一直苦于随着时间的推移,系统代码快速腐化的问题,而DDD正是对抗这种腐化的底层逻辑,是软件工程的第一性原理。

对于学生群体,我接触的案例证明,对于软件领域的新人,反倒更容易理解和接受DDD,这是因为目前主流的软件设计指导,很多都指向了与DDD相反的方向,新人因为没有被这些信息所误导,没了先入为主的思维枷锁,很自然地容易接受更有收益的软件设计思想。

软件工程师最喜欢的产品经理,大概率是懂一些技术的产品经理,而如果对DDD的概念有所理解的产品经理,我相信在需求分析、产品设计、模型设计方面能够与工程师更容易相互理解并建立共识,大家一定还记得之前文章所说的“拟人化建模沟通法”,在这里更是能发挥巨大的作用,使得“需求-模型”的一致性得到更好的保障。

学习路径

下图展示了一个学习的循环迭代,我认为可行几点如下:

  1. 学概念,通过系列文章、视频,构建基本概念认知

  2. 学实践,使用DDD框架做代码练习

  3. 做验证,一个教练指导并不断地实战体验,迭代认知和行为

学概念

我们认为DDD的概念是具体的,是容易理解和实践的,如果你有通读本系列的前文,那么一定会有所感受,《老肖的领域驱动设计之路》,其中关键的概念观点包含但不限于:

  • 领域驱动设计是一种价值观

  • DDD原则

  • 边界明确是最重要的事

  • 一致性比正确性更重要

  • DDD是软件工程的第一性原理

  • 系统的复杂度来自元素的数量和元素之间的关系

  • 复杂度守恒定律

  • 拟人化建模沟通法

  • 不要复用

  • 万能模型之“命令-事件”

  • 如果写代码别扭,大概率是建模出了问题

学实践

学实践,就是不断地建模设计、代码实现,目前我们已经为Java、.NET生态分别提供了DDD战术框架,基于战术框架,并配套了工程模板,期望能够帮助你的团队在没有技术负担的状态下体验DDD带来的优势和收益,从而增强团队的DDD认知:

Java:https://github.com/netcorepal/cap4j

.NET: https://github.com/netcorepal/netcorepal-cloud-framework

关于教练

首先教练不是必须的,但一个好的教练,可以让你大大加速对DDD的认知和应用,教练的核心作用就是:

  1. 引导认知理解

  2. 教授实践方法

  3. 验证学习成果

那么对于一个好教练,我认为最关键的就是:能够判断决策(需求分析、建模设计、代码实现)是否符合DDD价值观。要做到这点,那么一个好教练大概率满足以下特征:

  1. 对DDD的理解准确

  2. 有实践的成功经验

哪里找一个好教练呢?(广告时间)在你眼前就有这么一位,关注我,我在直播间就是扮演教练的角色,欢迎互动交流。

视频与直播:

https://space.bilibili.com/6733407

如何判断成果

学习过程中,很重要的就是成果的正向反馈,关于DDD的学习,以我的经验来看,虽然无法给出明确的可量化的指标,但下面几点可以帮助你从主观上判断是否有进展:

  1. 对需求和系统有掌控感了

  2. 需求-模型-代码越来越一致了

  3. 写代码感觉丝滑了

  4. 代码BUG率有显著的改善

最后

欢迎交流实践经验,持续提高开发者的幸福感。

标签:教练,路径,建模,实践,最佳,软件工程,代码,DDD
From: https://www.cnblogs.com/xiaoweiyu/p/18379808

相关文章

  • Vue动态路径参数
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title><......
  • 10款主流图纸加密软件强力推荐|2024年图纸加密软件最佳选择!
    在现代商业环境中,企业图纸作为重要的知识产权和核心竞争力,一旦泄露可能会对企业造成严重的经济损失和竞争劣势。随着信息安全需求的不断提高,图纸加密软件的应用变得尤为重要。图纸加密不仅能够保护企业的技术机密,还能有效防止内部人员的恶意泄密。1.安秉图纸加密软件安秉图......
  • 在使用FastAPI处理数据输入的时候,对模型数据和路径参数的一些转换处理
    在开发Python的后端API平台的时候,为了兼容我SqlSugar开发的一些Winform端、BS端、UniApp端、WPF端等接入,由于部分是基于.net的处理,因此可能对于接入对象的属性为常见的Camel的驼峰命名规则,但是Python一般约定属性名称为小写,因此需要对这个模型进行兼容;另外默认FastAPI路由路径也是......
  • 代码随想录day41 || 121 买卖股票最佳时机,122 买卖股票最佳时机||,123 买卖股票最佳时
    121买卖股票最佳时机funcmaxProfit(prices[]int)int{ //dp五部曲 //1dp数组以及下标含义dp[i][0]表示第i天持有股票dp[i][1]表示第i天不持有 //2递推公式,dp[i][0]=max(dp[i-1][0],0-price[i]) //dp[i][1]=max(dp[i-1][1],dp[i-1][0]+price[......
  • 用Zustand实现组件级状态管理的最佳实践
    在前文中,我们介绍了Zustand这个简单、易用、轻量的状态管理框架。通常情况下,状态管理通常都是全局的,可以在应用的任意地方访问。然而,这样的做法是否真的符合最佳实践呢?如果从马克思的角度来看,任何片面的观点都是不全面的。事实上,有些时候我们只想创建页面级别或者组件级别的状态......
  • 在 .NET 8 中搜索值的最佳新方法
    https://www.bilibili.com/list/watchlater?oid=918750121usingSystem.Buffers;usingBenchmarkDotNet.Attributes;namespaceSearchValuesExample;[MemoryDiagnoser(false)]publicclassBenchmarks{privateconststringBase64Chars="ABCDEFGHIJKLMNO......
  • 在C#中应用命令模式:设计和实现的最佳实践
    在C#中应用命令模式:设计和实现的最佳实践引言在软件设计中,设计模式是解决常见问题的通用解决方案。命令模式(CommandPattern)是行为型设计模式之一,它将请求或操作封装为对象,从而使得你可以用不同的请求对客户端进行参数化,队列请求或记录请求日志,以及支持可撤销的操作。在C#......
  • tips in windows/ 1.windows文件路径最长限制
    1.windows文件路径最长限制场景:在用文件资源管理器删除名称超过255字符的文件(文件名最大字符限制就是255)时,发现删除不了,也没反应原因:windows删除调用的是explorer,对路径限制不能超过260,此时超过了,但又由于是应用层,所以不会直接给以报错。使用杀毒软件可以是因为他们调用的是......
  • DDD是软件工程的第一性原理?
    本文书接上回《DDD建模后写代码的正确姿势》,关注公众号(老肖想当外语大佬)获取信息:最新文章更新;DDD框架源码(.NET、Java双平台);加群畅聊,建模分析、技术实现交流;视频和直播在B站。前提本文需要以系列前文的逻辑链条和结论为前提,如果没有阅读过前文的,可以阅读合集《老肖......
  • 【微信小程序开发】栀子手作花花微信小程序商城开发最佳实践
    本文介绍了通过uniapp技术实现了一套栀子手作在线购物商城系统。包含首页、分类、我的等常用功能入口。一、功能演示首页:包含了商品介绍,领劵中心和商品列表区域。商品分类:支持不同的商品分类和商品搜素。商品详情:包含了商品详细的描述信息,透出了分享、首页、客服等入口。......