DDD从入门到精通:基础篇

这篇文章主要还是表述清楚DDD相关的基础概念,因为DDD入门有一定的专业名词,还是得有个基本的了解。

先讲解下领域模型作用:

对软件需求进行设计,维持其内在逻辑的一致性

1)划分边界、也是一种高内聚、低耦合

2)所有逻辑都是内聚在对象内部的【包含行为和数据】

为什么需要DDD?

DDD从入门到精通:基础篇

行业现状:

DDD从入门到精通:基础篇

贫血模型、充血模型

DDD从入门到精通:基础篇
  • 领域模型就是DDD?
  • 其实领域模型早于DDD,很早就存在了,DDD算是一种实现方式而已
  • 战略设计、战术设计
  • 领域、子域、界限上线文、上下文映射图这些是DDD的 战略设计 (帮助服务的关系设计、边界设计 )
  • 实体、值对象、聚合、CQRS、事件溯源、这些是DDD的 战术设计(实现手段 ) 。
    • 实体:具有唯一标识,实体可能会变化,比如订单状态,但它的唯一标识不会变化。有生命周期的概念(待支付、已支付、关闭等)
    • 值对象:特点是不变形。创建之后不会被改变。如果改变了,就是一个新的地址(打个比方),最多算是描述,仅仅只用来度量或描述的对象应该被设计为值对象
    • 聚合:关联对象的实体,将其作为一个单元来处理数据变更。
    • 聚合根:将多个实体和值对象聚合在一起的实体
    • 仓储:领域对象都怎么构建出来的,它们存在哪里?这就不得不提到仓储(Repository)这个概念。在DDD理念里,仓储负责领域对象的存储,但仓储本身并没规定存储介质。也就是说仓储只负责定义领域对象的 读/写协议,至于具体用内存、MySQL还是Oracle,它不关心。在《领域驱动设计:软件核心复杂性应对之道》中提到,一般 *只对聚合根建立仓储

示例:

  • 通过战略设计,划分模块和服务的边界与依赖关系,对微服务架构的设计至关重要。

  • 六边形架构:不同的外部系统通过不同的适配器与领域模型交互,可以是HTTP/WEBSERVICE/RPC只需要为这些不同的访问接口提供不同的适配器就可以了

待补充。。。

Original: https://www.cnblogs.com/StarbucksBoy/p/15048953.html
Author: 陶朱公Boy
Title: DDD从入门到精通:基础篇

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/615613/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java bean与xml 互转(对象转xml、xml转对象)

    日常吐槽: 好久都没怎么分享自已了…… ╮(╯▽╰)╭,最近有个需求,需要把 bean对象 转成 xml 文件,然后 xml 文件 转成对象 ( 生成 与 …

    Java 2023年5月29日
    093
  • git拉项目出现的小问题

    问题描述 在IDEA中拉代码事报错。 点击查看报错信息 error: unable to read askpass response from ‘C:\Users\&#x9…

    Java 2023年6月15日
    069
  • 双非本科,聊聊我是怎么学习编程的。

    大家好,我是 Guide哥~ 我的学校是荆州一所双非一本。 整个大一,我都没有怎么认真学习编程,每天就是出去玩,还有参加各种社团活动。 在大二上学期末,最终确定了自己以后要走的技术…

    Java 2023年6月9日
    088
  • Springboot限流工具之CurrentLimiting

    1.工具简介 CurrentLimiting:基于令牌桶算法和漏桶算法实现的纳秒级分布式无锁限流插件,完美嵌入SpringBoot、SpringCloud应用,支持接口限流、方法限…

    Java 2023年5月30日
    079
  • 打破双亲委派机制的自定义类加载器

    1.场景 mybatis的插件去做切换数据源 数据源存放在map中 mybatis的插件去map拿数据,发现数据丢失 2.springboot为了热加载自定义的 RestartCl…

    Java 2023年6月13日
    052
  • MYSQL 免安装

    本文使用mysql 8.0.22进行演示 一、MYSQL 下载 官网下载:地址:https://dev.mysql.com/downloads/mysql/ 阿里云盘:链接:htt…

    Java 2023年6月5日
    0134
  • 一文带你搞懂 JWT 常见概念 & 优缺点

    在 JWT 基本概念详解这篇文章中,我介绍了: 什么是 JWT? JWT 由哪些部分组成? 如何基于 JWT 进行身份验证? JWT 如何防止 Token 被篡改? 如何加强 JW…

    Java 2023年6月9日
    080
  • 戏说领域驱动设计(十六)——实体概念

    现在开始正式的进入战术部分,我看前面发的一些文章,只要有代码的阅读量就高,没代码的就差太多了,难道是因为平台只要看到代码才会加强推荐吗?真要是这样那我是真醉了,其实学习DDD光看代…

    Java 2023年6月7日
    072
  • Lambda表达式工具类-日常搬砖

    众所周知,jdk8提供的Lambda表达式能帮我极大的精简代码,但是就在我们在实际使用过程中会有一些重复性的代码,比如对于stream来源的空判断处理,今天我就给大家整理了一些工具…

    Java 2023年6月5日
    071
  • 最长上升子序列

    给定一个长度为 (N) 的数列(A),求数值严格单调递增的子序列的长度最长是多少。 第一行包含整数 (N)。 第二行包含 (N) 个整数,表示完整序列。 输出一个整数,表示最大长度…

    Java 2023年6月7日
    066
  • NoteOfMySQL-14-日志管理

    一、MySQL日志 日志是MySQL数据库的重要组成部分,日志文件记录了MySQL数据库的日常操作和错误信息,可以通过分析这些日志文件了解MySQL数据库的运行情况。MySQL数据…

    Java 2023年6月5日
    054
  • 垃圾收集器与内存分配策略

    程序计数器、虚拟机栈、本地方法栈三个区域随着线程的创建而创建、执行完成销毁,栈中的栈帧随着放大的进入和退出执行入栈与出栈,每个栈帧分配多少内存基本上是在类结构确定下来时已知,因此这…

    Java 2023年6月9日
    080
  • 利用Redis对批量数据实现分布式锁

    在开发的 收入结转平台界&…

    Java 2023年6月7日
    065
  • 在Golang中是锁或Channel还是Atomic

    与其他编程语言一样在并发环境下如不对多个 goroutine(线程)访问或修改的共享资源元素的进行控制,让进入 临界区的对象互斥。就可能会出现数据异常情况;一个 非线程安全对象如下…

    Java 2023年6月16日
    084
  • jenkins升级2.249版本后 节点(Node)配置的启动方式中没有Launch agent via Java Web Star

    选择【lanch agent by connecting it to the master】这个选项时–默认选项,报错如下 Either WebSocket mode …

    Java 2023年5月29日
    076
  • 基于Python来获取用户手机设备使用情况

    前言 本博客为模式识别作业的记录,实现批感知器算法、Ho Kashyap算法和MSE多类扩展方法,可参考教材[ 1 ] \color{#0000FF}{[1]}[1 ]。所用数据如…

    Java 2023年6月7日
    076
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球