DDD架构概述

DDD(Domain-Drive Design)由Eric Evans(埃里克·埃文斯)提出,为解决复杂性而诞生,是综合软件系统分析与设计的面向对象建模方法;将需求分析与模型设计统一同时实现以业务实体为核心的灵活扩展;通过分层的方式将领域划分在不同的层次实现业务逻辑的剥离,从而控制业务本身的复杂度;

1. DDD要点

  • 数据库为中心与业务领域为中心模型对比:


    db-ddd.png

1. DDD定义了领域模型

  • DDD架构打破了系统分析(需求分析)和系统设计的隔阂,提出了领域模型的概念从而统一了分析与设计,使得软件能够更灵活的跟上需求的变化。
  • 领域在 DDD 中占据了核心的地位,DDD 通过领域对象之间的交互实现业务逻辑与流程,并通过分层的方式将业务逻辑剥离出来,单独进行维护,从而控制业务本身的复杂度。
  • DDD需求第一步就是考虑领域模型,而不是将其切割成数据和行为,然后数据用数据库实现,行为使用服务实现,最后造成需求的首肢分离。
  • DDD让首先考虑的是业务语言,而不是数据。重点不同导致编程世界观不同;

1.2 领域模型与SOA微服务

  • DDD+SOA微服务器的事件驱动架构实现CQRS的读写分离,应对复杂业务逻辑。
  • DDD的聚合模型+事件驱动代替SOA的数据表模型+消息驱动
  • 领域模型的价值在于提供一种通用的语言,使得领域专家、产品经理和软件技术人员联系在一起,沟通无歧义;

2. DDD落地架构

DDD 作为一种系统分析的方法论,最大的问题是如何在项目中实践。而在实践过程中必然会面临许多的问题,「模式」是系统架构领域中一种常见的手段,能够帮助开发人员与架构师在遭遇某种较为棘手,或是陌生的问题时,参考已有的成熟经验与解决方案,从而优雅的解决自己项目中的问题。

2.1 CQRS模式

  • CQRS全称为Command Query Responsibility Segregation,中文名为命令查询职责分离,故名思义是将command与query分离的一种模式。
  • 命令是对会引起数据发生变化操作的总称,即我们常说的新增,更新,删除这些操作,都是命令。
  • 而查询则和字面意思一样,即不会对数据产生变化的操作,只是按照某些条件查找数据。
  • CQRS 的核心思想是将这两类不同的操作进行分离,然后在两个独立的服务中实现。这里的服务一般是指两个独立部署的应用。在某些特殊情况下,也可以部署在同一个应用内的不同接口上。
  • CQRS架构图:


    CQRS架构图
  • CQRS带来的问题1:不支持事务引起的数据不一致问题;
  • CQRS带来的问题2:实时性差引起的事件延迟问题;
  • CQRS带来的问题3:没有成熟的框架(包括Axon框架),一般需要手动实现;

2.2 其它模式

  • Clean架构
  • 六边形架构
  • Event Source

其它名词

  • CRUD
  • 失血模型与充血模型
  • 领域模型
  • 聚合模型
  • 领域事件与消息中间件

本文来自:https://www.jdon.com/ddd.html

你可能感兴趣的:(DDD架构概述)