关注△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、中间件…等最全大厂必考题及答案详解

图片

需要以上架构专题&面试答案的同学,加我微信即可领取!

添加时备注:资料

图片