DDD架构详解与图文总结 -- 知识铺
关注△mikechen的架构笔记△,十余年BAT架构经验倾囊相授
大家好,我是mikechen。
DDD是现在非常火热的架构设计,而且大厂面试也经常考察,下面我就全面来详解DDD架构@mikechen
最新mikechen原创超30万字《阿里架构师进阶专题合集》和《最全大厂面试题及答案总结》,请关注本公众号【mikechen的架构笔记】,后台回复:资料,即可领取。
DDD
DDD,全程是领域驱动设计(Domain-Driven Design,简称 DDD),是一种软件开发方法论。
DDD,主要通过深刻理解业务领域,并将其转化为技术,来实现复杂业务系统的高效设计、和开发。
DDD的作用主要体现在如下4大方面:
第一:促进业务、和技术团队的沟通。
比如:通过建立统一的领域语言,DDD帮助业务、和技术团队,更好地沟通和理解业务需求,减少误解、和沟通成本。
第二:提高代码质量、和可维护性。
比如:DDD强调清晰的领域模型、和边界,鼓励使用面向对象的设计原则,提升代码的可读性、可维护性、和可扩展性。
第三:聚焦业务价值
DDD将关注点放在业务逻辑、和需求上,确保开发的每个功能,都是为了解决实际业务问题,从而最大化业务价值。
第四:应对复杂性
通过划分子领域、和界限上下文(Bounded Context),DDD能够有效地管理、和应对复杂业务领域中的复杂性。
DDD架构
DDD架构通常分为四层结构,这四层各自承担不同的职责,共同构成一个完整的领域驱动设计系统。
如下图所示:
传统的方式,经常会分为三层架构,一般会包含:表示层、业务逻辑层、与数据访问层。
如下:
表示层(Presentation Layer)
-
功能:处理用户界面和用户输入。
-
职责:展示数据,处理用户交互,将用户的请求传递给业务逻辑层,并显示结果。
业务逻辑层(Business Logic Layer)
-
功能:包含应用程序的核心业务逻辑和规则。
-
职责:处理业务逻辑,实现应用程序的核心功能,调用数据访问层进行数据操作。
数据访问层(Data Access Layer)
-
功能:处理与数据库或其他存储系统的交互。
-
职责:执行 CRUD 操作,管理数据持久化,封装对存储的访问逻辑。
但是DDD架构,会分层四层架构,这是与传统架构最大的区别。
1.用户界面层
主要:处理用户界面、和用户输入。
同传统架构,展示数据,处理用户交互,将用户的请求传递给应用层,并显示结果。
2.应用层
应用层:主要实现应用程序的用例、和业务流程,确保应用程序的工作流正确无误。
与传统业务逻辑层的区别:应用层关注的是应用程序的操作、和流程,而不是具体的业务逻辑。
它不包含复杂的业务规则,而是调用领域层中的业务逻辑来完成任务。
3.领域层
领域层是 DDD 的核心层,包含:领域模型、和业务逻辑,这是与传统架构最大的区别点。
领域层,主要复制:定义、和实现领域模型,主要包含:业务逻辑、和领域规则。
比如:包含实体、值对象、聚合根、领域服务。。。。。等。
如下图所示:
1).实体(Entity)
实体:是领域模型中具有唯一标识符的对象。
实体通过唯一标识符,(如ID)来区分其他实体,即使它们的其他属性相同
实体在系统中有自己的生命周期,可以被创建、修改和删除。
假设,我们在一个电商系统中设计订单系统,其中的订单就是一个实体。
public class Order {
2).值对象(Value Object)
值对象,代表某种特定的概念、或属性,并且通常是不可变的。
值对象一旦创建,其属性值不会改变,如果需要更改,通常会创建一个新的值对象。
举一个例子,在电商系统中,Money 类可以作为值对象来表示货币金额。
public class Money {
3).聚合(Aggregate)
聚合是一个领域模型中的重要概念,它是一个实体的根,负责管理:聚合内所有的实体、和值对象。
举一个例子,还是电商的场景,比如:订单聚合,就可以包含:订单、物流、发货地址…等。
public class Order {
4).领域服务(Domain Service)
领域服务,通常用于处理跨越多个聚合的业务逻辑,或者,处理那些没有明显的归属到某个特定对象的逻辑。
领域服务通常包含:复杂的业务逻辑,它们负责协调多个领域对象之间的交互。
比如:在电商系统中,OrderService 可以作为领域服务来处理跨多个订单的复杂业务逻辑。
5).领域事件(Domain Event)
领域事件:用于表示领域模型中发生的业务事件。
例如,当订单被创建时,可以触发:库存管理系统,更新库存…等事件。
以及,当用户信息被更新时,可以发布领域事件,以同步到其他相关系统。
4.基础设施层(Infrastructure Layer)
与传统数据访问层的区别,基础设施层不仅包括数据访问,还包括其他技术实现,如文件存储、消息队列等。
它与领域层和应用层解耦,以提供对底层技术的支持。
提供持久化、消息传递、网络通信…等底层支持功能,比如:数据库访问、外部系统集成、日志记录…..等。
以上
最后送大家一个福利:
送大家一份我原创超30万字的阿里架构师进阶专题合集,非常的全面。
以及给大家整理了一份非常全面的Java面试题及答案合集,包含:Java、多线程、JVM、Spring、MySQL、Redis、Dubbo、中间件…等最全大厂必考题及答案详解。
需要以上架构专题&面试答案的同学,加我微信即可领取!
添加时备注:资料
- 原文作者:知识铺
- 原文链接:https://index.zshipu.com/geek001/post/20240723/DDD%E6%9E%B6%E6%9E%84%E8%AF%A6%E8%A7%A3%E4%B8%8E%E5%9B%BE%E6%96%87%E6%80%BB%E7%BB%93--%E7%9F%A5%E8%AF%86%E9%93%BA/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com