本文书接上回《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的最佳路径的更多相关文章

  1. 10 个学习iOS开发的最佳网站(转)

    10 个学习iOS开发的最佳网站 作者 jopen 2012-09-26 08:59:56 1) Apple Learning Objective C Objective-C,通常写作ObjC和较少用 ...

  2. Java学习-009-文件名称及路径获取实例及源代码

    此文源码主要为应用 Java 获取文件名称及文件目录的源码及其测试源码.若有不足之处,敬请大神指正,不胜感激!源代码测试通过日期为:2015-2-3 00:02:27,请知悉. Java获取文件名称的 ...

  3. springMVC学习总结(二)路径映射和请求方法限定

    springMVC学习总结(二)路径映射和请求方法限定 一.路径映射 无参数的访问路径 对springmvc项目的访问路径,是由根路径和子路径组成:在注解式开发中,根路径标注在类名之上,子路径标注在方 ...

  4. ArcGIS 网络分析[1.2] 利用1.1的线shp创建网络数据集/并简单试验最佳路径

    上篇已经创建好了线数据(shp文件格式)链接:点我 这篇将基于此shp线数据创建网络数据集. 在此说明:shp数据的网络数据集仅支持单一线数据,也就是说基于shp文件的网络数据集,只能有一个shp线文 ...

  5. 使用 EOLINKER 进行接口测试的最佳路径 (下)

    本文为 <使用 EOLINKER 进行接口测试的最佳路径> 下半部分文章,主要介绍测试脚本如何执行和报告生成,以及测试项目人员如何协作.还没看过上篇文章请戳 使用 EOLINKER 进行接 ...

  6. 7个在线学习C++编程的最佳途径

    7个在线学习C++编程的最佳途径 jopen 2012-09-27 15:51:13 • 发布 摘要:C++是一种静态数据类型检查的.支持多重编程范式的通用程序设计语言.它支持过程化程序设计.数据抽象 ...

  7. Java NIO 学习笔记(五)----路径、文件和管道 Path/Files/Pipe

    目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...

  8. 寻找最佳路径(ArcPy实现)

    一.背景 随着社会经济发展需求,公路的重要性日益提高.在一些交通欠发达的地区,公路建设迫在眉睫.如何根据实际地形情况设计出比较合理的公路规划,是一个值得研究的问题. 二.实验目的: (1)通过练习,熟 ...

  9. TKE 注册节点,IDC 轻量云原生上云的最佳路径

    林顺利,腾讯云原生产品经理,负责分布式云产品迭代和注册节点客户扩展,专注于云原生混合云新形态的推广实践. 背景 企业在持续业务运维过程中,感受到腾讯云 TKE 带来的便捷性和极致的使用体验,将新业务的 ...

  10. “假学习“&”真学习“?(摘)

    什么叫做“假学习”? 一.看书 买一堆书,有空看看.看书,这是典型的假学习.看书看不懂还在看,就是假学习,欺骗自己,安慰自己正在学习而已.专业书都写得很好,但大都是写给已经懂的人看的.看书的最大作用就 ...

随机推荐

  1. 【WPF】根据选项值显示不同的编辑控件(使用DataTemplateSelector)

    接了一个小杂毛项目,大概情形是这样的:ZWT先生开的店是卖拆片机的,Z先生不仅卖机器,还贴心地提供一项服务:可以根据顾客需要修改两个电机的转向和转速(机器厂家有给SDK的,但Z自己不会写程序).厂家有 ...

  2. 3568F-翼辉SylixOS国产操作系统演示案例

     

  3. k8s实战 ---- pod 基础

    如果你对k8s还不了解,可以看下前文 k8s 实战 1 ---- 初识       (https://www.cnblogs.com/jilodream/p/18245222) 什么是pod,pod在 ...

  4. MySql创建事件、计划、定时运行

    CREATE EVENT IF NOT EXISTS check_timeout_eventON SCHEDULE EVERY 30 MINUTEDOBEGIN UPDATE safetyApp_in ...

  5. oeasy教您玩转vim - 90 - # 语法定义syntax

    ​ 内容查找 grep 回忆 我们这次研究了一下配色方案 murphy虽然配色好看 但是对于java的支持并不好 我们对于murphy进行了修改 增加了String.StorageClass颜色的定义 ...

  6. MySQL之DML

    DQL:SELECT * FROM 表名 DML(数据操作语言,它是对表记录的操作(增.删.改)!) 1. 插入数据 * INSERT INTO 表名(列名1,列名2, ...) VALUES(列值1 ...

  7. markdown 的使用技巧

    1.项目目录层级结构 npm i tree-node-cli -g 全局安装 命令 -L 是确定要几级目录,-I是排除哪个文件夹下的,然后我是要在README里面生成项目结构树 先cd到需要生成目录的 ...

  8. linux服务器webdriver启动Chrome浏览器失败

    碰到一个linux启动Chrome浏览器失败的奇怪问题,查了很久资料,问题终于解决了,特此记录一下 我的情况是,一开始运维给了一个deploy的账号去部署项目UI自动化测试项目,项目是运行没有问题的, ...

  9. elasticsearch初步使用学习

    通过使用elasticsearch,我们可以加快搜索时间(直接使用SQL的模糊查询搜索耗时会比较久,而且elasticsearch的响应耗时与数据量关系不大) es主要用于存储,计算,搜索数据 依次部 ...

  10. 用jacoco统计JAVA项目测试代码覆盖率

    一.概述 Jacoco 统计的是全量代码覆盖率.它不仅支持生成单元测试的覆盖率,也支持监控生成接口测试,功能测试的覆盖率. 在新一代精准测试技术流的影响中,各大型单位对覆盖率的追求越来越迫切.作为一款 ...