摘要:DDD(领域驱动设计),是现在非常火热的架构设计,而且大厂面试也经常考察,下面我就全面来详解DDD@mikechen
DDD(领域驱动设计),是现在非常火热的架构设计,而且大厂面试也经常考察,下面我就全面来详解DDD@mikechen
本文作者:陈睿|mikechen
文章来源:mikechen.cc
领域驱动设计(Domain-Driven Design,DDD),是一种软件开发方法论,强调在软件开发过程中,应关注领域模型的设计、和实现。
Eric Evans 于 2003 年在其著作《Domain-Driven Design》中提出,通过业务专家和开发人员的深度协作,构建一个反映业务核心的 领域模型。
随着业务的不断发展,软件系统变得越来越复杂,DDD提供了一套方法论,帮助开发人员更好地应对复杂的业务逻辑。
DDD强调团队协作,通过统一语言和领域模型,促进开发团队与业务专家之间的沟通。
DDD原理
DDD通常采用分层架构,将系统分为多个层次,每个层次负责不同的关注点。
如下图所示:
整体分为“四层”,如下:
用户界面层(User Interface Layer): 负责与用户交互;
应用层(Application Layer): 协调领域层、和用户界面层之间的交互;
领域层(Domain Layer): 包含:领域模型,是系统的核心;
基础设施层(Infrastructure Layer): 提供技术实现细节,如数据库访问、消息队列...等。
DDD架构
DDD架构的一些核心设计、和原则,如下:
领域(Domain)
领域是指系统所关注的业务范围,例如:电商、银行、医疗...等。
领域是DDD的核心概念,领域模型是对领域的抽象和建模。
领域是整个系统设计的基础,它决定了软件开发的核心目标/和范围。
对于一个电商系统,领域可能包括“订单管理”、“用户管理”、“库存管理”...等。
子域(Subdomain)
子域:是指领域可以划分为多个子域,每个子域代表一个特定的业务关注点。
通过将复杂的领域拆分为多个子域,可以更好地管理和解决特定的业务问题
核心域(Core Domain)
核心域是指领域中最重要的部分,直接关系到企业的核心竞争力。
核心域通常是企业的核心业务能力,例如:电商的订单管理、银行的账户管理...等。
限界上下文(Bounded Context)
限界上下文是指一个领域模型的应用范围,具有明确的边界。
限界上下文是DDD中的一个重要概念,用于定义领域模型的边界、和范围。
比如:在电商系统中,“订单管理”上下文、和“用户管理”上下文是独立的限界上下文,它们之间通过事件、或 API 交互。
实体(Entity)
实体是指具有唯一标识和生命周期的对象。
实体:通常是领域模型中的核心对象,例如:用户、订单、商品...等。
比如:电商系统中的“订单(Order)”就是一个实体,每个订单都有唯一的订单号。
值对象(Value Object)
值对象是指描述对象的属性,没有唯一标识,通过属性值来区分。
值对象通常是领域模型中的辅助对象,例如:颜色、大小、价格...等。
聚合(Aggregate)
聚合是指一组相关对象的集合,作为一个整体进行修改。
聚合通常是领域模型中的一个重要概念,用于定义对象之间的关系和边界。
比如:电商系统中,“订单”是一个聚合,包含:订单实体(Order)和订单明细(OrderItem)。
总之,DDD通过将复杂的业务领域分解为更小的、可管理的子域,并使用明确的边界来隔离这些子域,从而提高系统的可维护性、和可扩展性。
本文作者:陈睿|mikechen
文章来源:mikechen.cc
来源:夏琳论科技