一、背景

在刚学DDD的时候,很多一起学习的小伙伴们都在寻找一些样例和架构,同时也有一些人比较热衷于寻找一个最标准的DDD实战案例。在我学习的后期已经准备构建一些这样的案例了,同时网上也出现了一些以不同架构风格落地的DDD案例。但是对于大佬们而言,他们追求的已经不再是DDD案例了,而是一些其他的东西。

本文通过一些见闻来阐述在DDD学习和落地的过程中大佬的方向和小弟的目标是怎么样的,希望通过此篇文章来引发一些思考。

二、大佬的方向

就目前看不同的大佬的研究方向都不太一样,相关主题深入下去可能需要一本书来书写了,所以这里总体上分为三大类,从内涵,外延和架构方面进行探索。

2.1 DDD的内涵

2.1.1 领域与上下文

从内涵上讲,DDD的很多概念都不容易理解,往往遇到一些新的场景对相关概念则有新的认识,所以这些大佬仍然在深挖DDD的一些概念,试图对DDD相关的内容产生更深层次的思考。比如聚合划分的原则,DDD与微服务如何协作等都是他们研究的内容。

2.1.2 战略与战术的权重

不同的大佬对于这二者有着不同的倾向性,不过一个很明显的特征就是他们不会太拘泥于战术层面的一些模式,而是更关注领域及以上的战略模式的应用和解决方案。

2.2 DDD的架构

2.2.1 业务架构

在业务架构中更容易体现DDD的优势,所以很多DDD落地的企业都会从业务架构入手,对于大佬而言,需要更多的业务知识和对整体大型的多个领域进行综合把控,如何让战略模式在大佬和有话语权的领导上发挥出作用是他们要考虑的事情。

2.2.2 应用架构

在技术方面,主要就是不同的架构风格与DDD的结合,之前也相对全面的说过一些架构风格相关的内容,对于不同的场景不同的公司和应用其架构风格都不止一种,但是仍然有大佬在向前走,开创出新的架构内容,从而满足业务需求,比如演进式架构,菱形架构等。

2.2.3 脚手架

在学习DDD的时候对COLA架构的研究就相对完整一些,COLA提供了一个脚手架,类似于项目初始化的功能,让整体模块符合COLA架构风格。但是其他大佬的方向就是基于某个架构风格做深,做强,比如之前介绍的Kola还有CQRS框架Axon。在开源社区中也有另外一种基于某些架构风格结合DDD的战术模式做的实战demo。类似于脚手架的作用供参考和学习。

2.3 DDD的外延

2.3.1 建模方法论

大佬们对于建模方法和建模实战早已运用自如,但是对于领域,上下文的划分仍然是需要结合业务和经验的。只不过大佬的诉求是希望找出更好更合适的建模方法来驱动完善模型,让业务模型的内涵与外延更加符合业务需求。

2.3.2 新领域的探索

在不同公司任职的大佬们也在尝试使用DDD来解决一些新的问题,这些新领域主要包括下面几方面

  1. 遗留系统的改造和微服务

目前遗留系统在企业中占比还是比较多的,不管是什么原因遗留系统始终是企业的一个痛点或者隐形成本,对于遗留系统的处理也是一个比较有技术含量的话题。当然也牵扯到使用DDD的方法模式来辅助解决这个问题,大佬们有更专业的理论和实践,所以结合DDD也不是一件难事。

  1. 设计领域

在设计领域比如芯片设计,前端UI设计,组件化等等都绕不过DSL,统一语言模式与领域特定语言也有着很深的关联关系,所以有合适的场景在设计领域中使用DSL来搞也是不错的方案。

  1. 云原生领域

云原生领域的发展也是非常迅速的,重点是对于云原生领域里的出现的各种问题,可以使用DDD的模式和架构来优化和解决。

  1. 从需求到系统落地的全流程构建

就目前公开的演讲资料来看,在外延方面,不少大佬还是希望从需求到系统落地演进上提出一整套方法,这可能就有点超出了DDD本身的能力范围了,结合TDD,DevOps,敏捷等来达到一些目标,比如研发效能上有所提升,数字化和企业架构上能更符合业务诉求。回到这一方向,不仅需要理论和方法也需要有合适的场景,当然这些场景可能更少见。

三、小弟的道路

下面看一下很多观望DDD和初步学习DDD的小弟们有哪些诉求,他们的目标是什么?他们有哪些困惑,希望得到什么样的答案。

3.1 执着于Demo

很多初级软件开发者学习实战的一个方向就是找到一个demo,然后去研究它,如果可能的话会复制粘贴过来或者直接模仿。当然,也有别的方式,比如深入原理然后结合demo,不局限于Demo。但是对于DDD学习者来说他们更希望看到一个Demo,然后去模仿它,然后结合书籍,博客里的一些概念说明或者结合他人的讲解来帮助自己理解。

在Demo方面,DDD学习者希望有一个成功的案例可以让自己不至于趟太多的坑,但是有些人希望Demo可以是一个大而全的实战内容。可以面面俱到。但是,说实话,市面上可能没有这样的Demo。因为一个大而全的Demo做起来可能会非常耗时,同时在战略层面也不是一个人能玩的动的。另外对于Demo而言,其没有演进性,也没有具体真正的参考需求,所以无法深入发挥DDD的全部优势。

3.2 希望有标准

由于DDD近几年的兴起,不同的DDD实战案例也多了起来,在传播和分享上没有统一的认知。对于初学者来说更是一头雾水,也容易产生抗拒心理。所以不仅是大佬,连刚入门的小伙伴也希望可以有一套DDD的标准,这些标准包括概念定义,架构风格适配,领域划分原则,方法论等等。当然,作为DDD学习和使用者,未来也希望参与DDD标准的建设中,相关的内容也会在公众号上发表,敬请期待。

3.3 受困于DDD概念

DDD令人诟病的一个方面就是概念太多,也不容易理解,不能解释所有场景,所以对于初学者来说,DDD的概念无疑会进一步劝退一些人。但是也没有更好的方法来精简或者统一。直观的感受就是比较零散,所以初学者们可能更希望得到自己场景下的合理解释。

不过,书读百遍,其义自现。产生困惑是正常的,但是也不能钻牛角尖。一个很简单的方法就是深入实战,找人交流。对于不同的理解代码和模块上有不同的体现,可以针对自己的困惑找一些场景使用不同的潜在方案来练一练,感受一下哪个方案和理解方向是对的。

四、总结

不管大佬也好,菜鸟也好,终究是希望DDD可以帮助自己解决问题。DDD相关的东西也不是哪个大佬就是标准,也不是哪个菜鸟是真的菜,所以动手实践,show your code。