今天在这儿带大家认识下DDD,一个听起来很垃圾却真的很牛X的设计思想,架构师必备!
前言
在日常工作中,接手或维护的工程,大多数使用的是三层架构,即controller、service、dao三层,在使用的过程中,会遇到很多问题:
- 面向数据建模,面向过程编程,没有真正“面向对象”
- 只注重结果,不注重过程,service层动辄数百上千行,充斥着过程代码、胶水代码,要么臃肿、要么流水账、要不重复、要么逻辑分散,后期极难维护
- 代码耦合严重,层与层之间互相调用、逆向调用,牵一发而动全身
- 代码无法体现业务,在大家都不爱写注释的情况下,随着时间的推移,代码业务逻辑将无人理解,不敢改也改不动。
那么有没有一个好的解决方案呢?今天要讲的DDD就是一个不错的选择。
DDD
DDD,即领域驱动设计,完美的解决了以上问题:
- 面向领域建模,面向对象编程,代码直接映射现实世界概念,贴近业务,离客户更近
- 领域逻辑高内聚,符合Java开发原则
- 技术细节变更如数据库、缓存、定时器等的变更对业务逻辑影响比较小,非常适合插件式架构
- 代码可读性、可维护性更强,对后续扩展、移植等支持更好,分层更加科学
DDD的概念,在网上很容易找到,这里就不赘述了。
然而网上DDD的文章虽然很多,但大多数是理论知识,介绍的无非就是一些名词:战略设计、战术设计、核心域、支撑域、值对象、实体、聚合... 对我们实际落地却没有太多的帮助,下面介绍下我在SpringBoot中应用DDD的落地方案。
落地方案
1、代码分层
代码分层
- 用户接口层:图中的api包(即controller层,我嫌controller后缀太长...)
- 应用