零、背景
经过一段时间的学习有了些积累,也在师兄的鼓励下将学习DDD的一些成果整理了下,准备进行一次技术分享,说实话过程很痛,结果有点小欣慰。在进行DDD的学习过程中也总结了一些入门并掌握DDD的一些方法和实践。
一、DDD的门槛在哪里
1.1 理论的门槛
很多同学学习DDD觉得有门槛的一个原因就是理论很深奥,概念很多,不容易理解。很多时候CURD类的业务也禁锢了我们探索新的开发理论的脚步。这里给出一些建议,要想学好DDD肯定要啃书。另外一方面设计模式和一些相关的开发理论也可以帮助入门DDD。从我的理解来看DDD有种博大精深的感觉,类似武功心法,可以帮助提升内功。
1.2 实践的门槛
在软件架构,软件工程发展的历史中有很多架构风格,系统设计方法,但是DDD却没有真正给出一个典型的案例,在eric的书里也有一些并不太成功的例子。另外一点就是在开源社区中也很少有典型的DDD实践工程。很多项目并不是用DDD构建并迭代的。因此很多想尝试DDD实践的人在这里就有点举步不前了。就目前看,DDD在中国的发展其实还是越来越好的,很多大佬都在这上面发力。因此关于DDD架构的脚手架和一些简单的case都慢慢多了起来,只要留心就可以借鉴学习下。
1.3 落地的门槛
说完了上面两个门槛,最后就是怎么落地的问题了,自己单独实践终究逃不过项目夭折的命运,而且也不一定有太多收获。从个人方面讲知识学到了,就要转化为能力对外输出,实现自身价值。从公司团队方面讲落地DDD当然是为了更好更快的业务开发和迭代。如果你有幸成为公司推广DDD的参与者,这将对DDD的学习和实践会有很大帮助,因为DDD更深层次的模式就是体现在团队与团队之间,项目交付,系统迭代上面。
二、如何学习DDD
前面说了有门槛,那么怎么跨过这些门槛呢。
2.1 先厚而薄
对于eric等大神的书肯定是要读起来的,因为这可以帮助建立DDD的完整体系,把书读厚就是要做笔记,找别人的博客,实践内容,写出自己的理解。然后读薄就是要归纳总结,由浅入深的对DDD涉及到的理论,场景总结一下。
2.2 揣摩参悟
在学习DDD的过程中肯定会遇到各种各样的问题,这里不妨先记录一下出现的一些问题,并尝试寻找一些相关博客书籍来帮助解决。有些问题并不是或者不需要马上得到答案,因为有些DDD模式可能当前阶段遇不到,不理解这都没有关系,把基础的概念,理论理解透了慢慢深入研究就行。
2.3 他山之石
学习和实践永远都是伴生的,尤其是面对一个相对陌生或者冷门的知识理论,我们可以借助各种工具,借助其他大佬的一些研究成果帮助自己学习实践。有条件的话可以找业界大佬讨论下自己的疑惑。
三、如何实践DDD
其实在说本小节内容的时候,要强调一下实践的背景和环境。主要就是是个人学习还是公司落地。因为个人学习和公司落地的这两种场景在实践DDD的时候可能有所不同。个人学习的话不好找一些典型的需求场景,公司落地的话也需要组织团队上的认可,推动落地的过程也比较漫长。下面给出一些通用的实践套路
3.1 先文档后代码
这跟平时的开发流程差不多,先梳理需求,设计表结构,设计接口,编写接口文档,设计交互时序,然后写代码。但是在DDD中的的文档包括架构图,实体,值对象,领域图,事件文档等等,这些建模中的文档也很重要。
3.2 先架构后框架
学习DDD的一个最简单的目的就是应对复杂业务场景和业务逻辑,那么涉及到的技术软件规模肯定会比较大,具有一定的落地难度,也有可能项目周期会很长很长。因此需要通过DDD的一些战略模式来帮助规划系统定位,职能,迭代路线等。同时有些架构风格也可以借鉴来规划整个系统的发展方向,这可以为后续的迭代,重构,持续交付等打下良好的基础。
在架构层面做好战略选择之后,就可以选择对应的技术栈了,比如rpc的实现,缓存的实现怎么评估接入到基础设施层等。另外一方面为了不让技术因素影响架构风格的选择,也需要了解很多技术原理和特点,避免踩坑。
3.3 先业务后技术
很多时候当我们熟悉了某某技术栈之后,来业务问题很容易从技术角度CURD或者设计模式来一套等,这种思维惯性导致了我们很容易失去技术和业务的平衡。在DDD中会比较强调如何拆解业务需求,从需求中拿到建模数据和接口行为。因此在学DDD的过程中一个重要的内容就是如何从业务中进行实体,值对象的建模。建模的好坏决定了这个项目的业务底座是否扎实,因此需要先抛开技术去抓住业务的核心信息。目前很多DDD相关的架构风格都会将技术因素整合在基础设施模块(或者层)中。技术栈稳定了就可以更多的关注业务域的变化。
四、最佳实践
DDD……JUST DO IT.
原文始发于微信公众号(神帅的架构实战):DDD的最佳实践
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/241677.html