02 《没有废话!说明白点!》——1分钟了解DDD

1 前言

最近在牛客看到一篇关于DDD的文章,完全看不懂,决定自己白话文一下,让各位老哥知道其大概思想。本篇全都是用自己的词语来表述这个DDD。

2 我的理解

DDD是一个代码架构设计方法。

使用Java写Spring的时候,我们会使用XxxController来映射接口,XxxService来执行逻辑业务,XxxMapper来进行持久化,这样的写法叫做MVC。

我不知道老哥们是怎么写的,我说一下我自己追求的MVC架构:

  • Controller层只捕获异常,将调用的对象转化,传递给Service,让Service层执行。
  • Service层负责主要业务逻辑,分为三层:
    • 上一层靠近业务,例如LoginService、RegisterService。
    • 下一层靠近Mapper,但是针对的是联结的情况,例如StudentTeacherService,主要是因为这些方法放到StudentMapper和TeacherMapper都不合适,索性抽出来了,同时还可以加上事务,就不用直接写SQL来搞这种事情。
    • 中间一层,就既不是上层,也不是下层的,例如RedisService。
  • Mapper层负责和数据库打交道,为Service层提供持久化,例如UserMapper,或者UserDAO。

DDD和MVC差不多,但是有点不太一样了:

主要分了下面几层:

  • 接口层:和上面提到的Controller的一模一样,只是名字改成了XxxApi,然后数据转化那里抽象出一个Assembler,实现DTO到DO的转化,这个好理解。
  • 应用层:这里和之前的Service层有点不一样,我之前不是说过,我把Service层分为三个层么,这里只有我提到的上一层,即只负责业务层,例如LoginService、RegisterService、或者提供给用户增删改查的PersonService这种。方便接口层直接调用,然后使用try-catch捕获异常,使用Assembler转化返回结果。
  • 领域层:这一层完全不一样,它提供了领域的概念。领域这玩意像某个抽象中心一样,领域的实体都围绕着这种中心,例如Person和Order就是两个领域,然后针对这个中心提供下面的几个:
    • 针对这个领域提供对应的实体,例如Order领域,里面有OrderOwner、OrderItems、Payment什么的,全部都围绕Order展开,又例如User领域,有User、Role、Authorization等等。尽管不同领域之间有重合的部分。
    • 针对这个领域提供应用层可用的接口,命名为XxxDomainService,然后应用层就用这个和领域层沟通。
    • 针对这个领域提供持久化的接口,之后在基础层可以实现接口,这就和持久化隔离开来。
  • 基础设施层:就提供一些通用的服务,例如整体的配置、工具类、通用的算法、持久层等等,就是放一些杂项。

3 总结

本质上,DDD只是强调了“Service领域化”这个思路,围绕着这个思路,把MVC混乱的Service层,拆分然后归属到不同领域,大大降低耦合性和服务复杂性。以至于之后要扩展什么业务,仅仅需要添加一个新领域即可完成,这种思维方式高效,实在是佩服。

最后,假如这篇文章对你有帮助,记得点赞收藏送花,假如有错欢迎批评指正。同时也欢迎各位在评论区提出自己的想法。

没有废话!说明白点! 文章被收录于专栏

记录一下我在学习后端中遇到的那些难以理清楚的知识

全部评论
我觉得ddd就是用接口层把web层 领域层 仓储层 给分层了
1 回复 分享
发布于 2024-08-06 16:58 浙江
web层复杂编排领域层 领域层负责编排仓储层
点赞 回复 分享
发布于 2024-08-06 16:59 浙江

相关推荐

ddd又叫领域驱动设计,是目前很多厂子在实践的一种设计思想(阿里/快手/美团/京东/字节等),已经被问过五次ddd了,基本上简历写了面试官必问,因为这个问题很宽泛,不像是个技术问题更像是个开放性的问题,分享一下自己的回答像ddd这种泛泛的高层的东西,作为一个经验没有多少的校招生无论怎么答一定会翻车,因为领域划分根本就不是校招生能决定的事情,包括每个厂都对ddd有不同的理解。而且万一面试官正好就是反对ddd设计,这时候再说ddd设计更是翻车中翻车。所以上来不是大谈特淡ddd,而是应该说先放出一波免责声明:“目前我只能作为校招生谈一谈我对ddd的理解,每个厂的实现都不一样,包括应用的目的和落地实践也不一样,接下来只是我自己的浅显的理解”接下来就是你自己的发挥了,什么领域划分,充血贫血模型,mvc弊端,闭包实现,缓解代码腐败,组织与系统对应之类的。这里没有一个统一的回答,如果这部分的回答想参考的话可以看美团技术团队对于ddd的实践,不赘述了。最后说完技术部分,就是收尾阶段了,提一下ddd作为高层涉及不是校招生能决定的,自己只是落地执行者,大的领域划分包括是否采用ddd还得看团队的Ld。ddd不是通用泛式而是要根据业务实际情况选择是否采用,有时候mvc也可能更好。#牛客AI配图神器# #后端# #暑期实习# #java# #ddd# #阿里巴巴# #美团# #字节跳动# #快手#
点赞 评论 收藏
分享
评论
3
16
分享

创作者周榜

更多
牛客网
牛客企业服务