美文网首页
DDD+微服务实战:什么是DDD?

DDD+微服务实战:什么是DDD?

作者: 南荣相如谈编程 | 来源:发表于2020-09-17 18:14 被阅读0次

1 DDD是什么?

DDD是领域驱动设计,是Eric Evans于2003年提出的,离现在有17年。

2 为什么需要DDD

当软件越来越复杂,实际开发中,大量的业务逻辑堆积在一个巨型类中的例子屡见不鲜,代码的复用性和扩展性无法得到保证。为了解决这样的问题,DDD提出了清晰的分层架构和领域对象的概念,让面向对象的分析和设计进入了一个新的阶段,对企业级软件开发起到了巨大的推动作用。

2.1 POP,OOP,DDD是如何解决问题

面向过程编程(POP),接触到需求第一步考虑把需求自顶向下分解成一个一个函数。并且在这个过程中考虑分层,模块化等具体的组织方式,从而分解软件的复杂度。当软件的复杂度不是很大,POP也能得到很好的效果。

面向对象编程(OOP),接触到需求第一步考虑把需求分解成一个一个对象,然后每个对象添加一个一个方法和属性,程序通过各种对象之间的调用以及协作,从而实现计算机软件的功能。跟很多工程方法一样,OOP的初衷就是一种处理软件复杂度的设计方法。

领域驱动设计(DDD),接触到需求第一步考虑把需求分解成一个一个问题域,然后再把每个问题域分解成一个一个对象,程序通过各种问题域之间的调用以及协作,从而实现计算机软件的功能。DDD是解决复杂中大型软件的一套行之有效方式,现已成为主流。

2.2 POP,OOP,DDD的特点

POP,无边界,软件复杂度小适用,例如“盖房子”。

OOP,以“对象”为边界,软件复杂度中适用,例如“盖小区”。

DDD,以“问题域”为边界,软件复杂度大适用,例如“盖城市”。

3 DDD的分层架构和构成要素

3.1 分层架构

image image

整个架构分为四层,其核心就是领域层(Domain),所有的业务逻辑应该在领域层实现,具体描述如下:

用户界面/展现层,负责向用户展现信息以及解释用户命令。

应用层,很薄的一层,用来协调应用的活动。它不包含业务逻辑。它不保留业务对象的状态,但它保有应用任务的进度状态。

领域层,本层包含关于领域的信息。这是业务软件的核心所在。在这里保留业务对象的状态,对业务对象和它们状态的持久化被委托给了基础设施层。

基础设施层,本层作为其他层的支撑库存在。它提供了层间的通信,实现对业务对象的持久化,包含对用户界面层的支撑库等作用。

3.2 构成要素

实体(Entity),具备唯一ID,能够被持久化,具备业务逻辑,对应现实世界业务对象。

值对象(Value Object),不具有唯一ID,由对象的属性描述,一般为内存中的临时对象,可以用来传递参数或对实体进行补充描述。

领域服务(Domain Service),为上层建筑提供可操作的接口,负责对领域对象进行调度和封装,同时可以对外提供各种形式的服务。

聚合根(Aggregate Root),聚合根属于实体对象,聚合根具有全局唯一ID,而实体只有在聚合内部有唯一的本地ID,值对象没有唯一ID

工厂(Factories),主要用来创建聚合根,目前架构实践中一般采用IOC容器来实现工厂的功能。

仓储(Repository),封装了基础设施来提供查询和持久化聚合操作。

4 小结

通过本文介绍,我们了解DDD是为解决软件复杂性而诞生,与OOP最大的区别就是划分边界的方式不一样,所以DDD本身掌握起来并不会感觉复杂,DDD其实是研究将包含业务逻辑的ifelse语句放在哪里的学问。

相关文章

  • DDD+微服务实战:什么是DDD?

    1 DDD是什么? DDD是领域驱动设计,是Eric Evans于2003年提出的,离现在有17年。 2 为什么需...

  • 领域驱动设计读书笔记-术语介绍

    本文为极客时间《DDD实战》的读书笔记 DDD-基础 DDD基础介绍 微服务设计和拆分的困境 对于微服务的拆分粒度...

  • DDD

    零、为什么DDD? 一、DDD与微服务 DDD和微服务有着天生的默契。比如一个微服务应该对应DDD中的一个限界上下...

  • DDD领域驱动设计浅见

    目录 DDD简介DDD是啥DDD能给微服务带来什么不用DDD的常见设计方式DDD整洁架构常见三层架构设计整洁架构D...

  • DDD分层架构与微服务代码模型

    微服务设计为什么要选择DDD?其中最重要的原因,就是采用DDD方法建立的领域模型,可以清晰的划分微服务的逻辑边界、...

  • Axon框架-构建可扩展性微服务

    Axon框架是一个Java微服务框架,他主要作用是帮助你基于DDD来实现微服务架构。 除了DDD,Axon框架还可...

  • 利用Spring Cloud实现微服务(二)--领域驱动设计

    在开发一个微服务之前,我们要设计微服务。设计微服务和领域驱动设计(DDD)有密切的关系,DDD有助于我们设计微服务...

  • BOSS 应用DDD的 一些基础概念

    本文是以最简单的方式去叙述DDD的概念。DDD 与 微服务 是紧密相关的, 所以必须是先了解 DDD 的方式才比较...

  • 微服务实战

    微服务实战(一):微服务架构的优势与不足 微服务实战(二):使用API Gateway 微服务实战(三):深入微服...

  • 微服务

    微服务实战(一):微服务架构的优势与不足 微服务实战(二):使用API Gateway 微服务实战(三):深入微服...

网友评论

      本文标题:DDD+微服务实战:什么是DDD?

      本文链接:https://www.haomeiwen.com/subject/jjhryktx.html