DDD 领域驱动设计·学习应用·二

领域驱动设计(DDD)的实践与应用

一、领域驱动设计简介领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发方法,它强调以业务领域为中心,通过与业务专家的紧密合作,来构建软件系统。

二、DDD在微服务架构中的应用1. 解耦微服务 使用消息队列(MQ)作为解耦微服务的中间件,可以有效地降低服务间的依赖,提高系统的可扩展性和可维护性。

  1. 事件驱动架构 DDD倡导使用事件驱动的方法来设计系统,通过事件的发布和订阅机制,实现服务间的异步通信。

三、聚合与微服务划分- 聚合 聚合是DDD中的一个重要概念,它代表了领域中的一个业务数据集合,具有一致性和交易性。在微服务架构中,一个聚合可以对应一个微服务。 - 微服务划分 根据业务领域的特点,将系统划分为多个微服务,每个微服务负责处理特定的业务逻辑。

四、资料来源与推荐- 极客时间的领域驱动设计课程 提供了深入的DDD理论和实践指导,推荐对DDD感兴趣的开发者学习。

五、个人实践与笔记整理本文作者通过个人实践,结合《极客时间的领域驱动设计课程》和B站上的分享,对DDD的理解进行了笔记整理,并探讨了如何将DDD应用到业务系统场景中。

六、结语DDD作为一种以业务为中心的软件开发方法,对于提高软件质量和开发效率具有重要意义。希望本文能够帮助读者更好地理解和应用DDD。


微服务架构下的事件驱动模式是实现服务间高效通信和数据一致性的关键技术之一。以下是对事件驱动模式在微服务架构中的两种应用场景的详细解析:

1. 微服务内模块之间的事件驱动在微服务架构中,模块之间的通信可以通过事件驱动来实现。这种方式允许服务在不直接调用对方的情况下,通过事件的发布和订阅机制来完成交互。具体来说,当一个模块完成某个操作时,它会发布一个事件,而其他模块可以订阅这个事件并作出响应。这种模式适用于需要快速响应和保证数据一致性的场景。

2. 微服务服务之间的事件驱动在服务间的交互中,事件驱动模式同样发挥着重要作用。例如,在电子商务系统中,一个下单操作会触发订单服务、库存服务、物流服务和履约服务等多个服务的协同工作。事件驱动模式允许这些服务通过消息队列来异步处理事件,从而提高系统的响应速度和扩展性。在支付环节,支付成功的消息可以被发布到消息队列,相关的服务订阅并处理这些消息,实现服务间的协同工作。

通过上述分析,我们可以看到事件驱动模式在微服务架构中的应用,它不仅提高了系统的灵活性和可扩展性,还有助于实现服务间的解耦和数据一致性。

1.3、领域事件总架构

1.4、领域驱动设计的应用案例

二、分层架构

2.1、初期四层架构(view-controller-service-domain)

在领域驱动设计书中,我们之前的文章讲过分层架构一共四层

但是我们也提到过架构是演进的,那么在大家不断摸索过程中,对架构进行了升级。

2.2、优化后四层架构(保留意见)

这里是作者提出的:希望将核心放到领域层,而不是基础层。这个感觉应该不是在于图的区别核心,所以保留意见。比如接下来的一张图来自作者

DDD 分层架构原则解析

1. 原则概述在领域驱动设计(Domain-Driven Design,简称DDD)中,分层架构是一个核心概念。其基本原则是每一层只能与直接下方的层发生耦合,以确保系统的模块化和灵活性。

2. 分层的目的分层架构的设计目的在于实现以下目标:- 高内聚:每一层都应集中处理其职责范围内的事务。- 低耦合:减少层与层之间的依赖,提高系统的可维护性。- 单一职责原则:确保每一层只负责一项功能或服务。- 迪米特法则:减少对象间的交互,只与直接的朋友通信。- 开闭原则:系统应对扩展开放,对修改封闭。

3. 架构层的调用关系在初期的四层架构中,虽然存在从上到下的调用,但DDD分层原则强调的是控制这种调用,以防止业务逻辑的泄露和依赖关系的混乱。

4. 聚合原则的应用聚合原则要求我们尽可能地简化服务间的依赖关系,通过分层架构来实现这一点,使得系统更加易于管理和维护。

5. 结论DDD分层架构原则是实现系统设计原则的一种方式,通过严格区分层与层之间的关系,我们能够构建出更加健壮、灵活且易于维护的系统。

案例比如我们的实际例子如下图,其实就如同我们的类的抽象+复用原则一样,如果领域层的服务可以合并就需要合并聚合,这样不仅简化服务而且对于之后拆分服务的边界上下文是有很好的帮助。

2.4、案例(三层架构升级到领域驱动四层架构)

2.5、回顾架构设计思想

2.5.1、洋葱架构(简洁架构)

我们现在在回头看架构设计思想,发现基础资源+用户界面在最外层,接下来是应用服务层最后是领域服务核心领域模型。

2.5.2、六边形架构

六边形架构主要是将其分为内六边形和外六边形。

2.5.3、DDD 风层四层架构和洋葱、六边形架构的共同点

2.6、案例

2.6.1、微服务架构

2.6.2、中台服务架构

2.6.3、中台和微服务

2.6.4、战略设计+战术设计

2.6.5、业务领域划分模版

微服务架构的演进

2.7 微服务架构的演进策略

微服务架构的演进是一个持续的过程,涉及到对现有系统的逐步改进和优化。以下是两种常见的演进策略:

2.7.1 演进策略

绞杀者策略这种策略类似于建筑拆迁,首先在现有系统旁边构建新的服务,然后逐步将流量和功能迁移到新服务上,最终拆除旧服务。

修缮者策略与绞杀者策略不同,修缮者策略更注重对现有系统的持续改进,就像对古建筑的维护和修缮一样,逐步提升系统的稳定性和性能。

2.7.2 微服务拆分的考虑因素

在进行微服务拆分时,需要考虑以下因素以确保拆分的合理性和有效性:

  1. 基于领域模型 - 根据业务领域的特点和需求来划分服务。2. 基于业务需求变化 - 考虑业务需求的变动频率和范围,以适应快速变化。3. 基于应用性能 - 从性能角度出发,确保服务拆分后能够提高整体性能。4. 基于组织架构和团队规模 - 考虑团队的组织结构和规模,以便于管理和协作。5. 基于安全边界 - 确保服务拆分不会影响到系统的安全性。6. 基于技术异构因素 - 考虑不同技术栈和服务的需求,以实现技术多样性。

2.8 不同边界划分方式

微服务架构的边界划分是一个关键的决策点,它影响着系统的可维护性、可扩展性和灵活性。不同的边界划分方式可以根据上述考虑因素来确定,以实现最佳的系统架构设计。

2.9、微服务项目代码模版案例

三、实际案例记录