当前位置: 首页 > news >正文

十分钟聊明白DDD领域驱动设计

文章目录

  • 一、什么是领域?
  • 二、领域如何驱动设计?
  • 三、如何发挥DDD的价值
  • 最后

十分钟聊明白DDD领域驱动设计

-- 楼兰

​ 关于DDD,大部分朋友应该都听说过。 全称Domain Driven Design,翻译过来就是领域驱动设计。这个神秘的架构思想,虽然远没有SpringBoot这类框架这么名声在外,但是却经常时不时冒出来,牵动一下大家的神经。美团、阿里每年的技术年会都会有关于DDD的经验分享,而另一方面,又有移动、电信等公司爆出DDD从入门到放弃的失败案例。

​ 那么到底什么是领域驱动设计呢?是不是用上了DDD的所谓四层架构,就是在用DDD了?其实DDD这东西看起来挺抽象,但是核心就是需要搞明白三个问题。

  • 到底什么是领域? DDD如此强调领域的重要性,但领域到底长什么样子呢?他应该要怎么落地呢?
  • 领域如何来驱动设计? 为什么DDD只是用来驱动设计,而不像SpringBoot那样直接做出一种框架实现呢?
  • 怎么用好DDD,或者说我们怎么来衡量DDD的价值? 一旦一个技术有价值,那么在行业内学起来用起来一定不难。就像Spring和SpringBoot,你别管他多复杂,里面有多少垃圾代码。但是他就是有用,所以毋庸置疑,你就能学好,企业也就能用好。

​ 对于DDD这么一种抽象的架构思想,其实如果把这三个核心问题想明白了,那么我觉得这个DDD,就通了一大半了。


一、什么是领域?


​ 这可以说是DDD最为核心的一个问题了。到底什么是领域呢?

​ 领域这个词看起来挺抽象的,但其实我们也在天天说领域。我们会说Java是一个领域,软件是一个领域,有时候也会说技术本身就是一个领域。每个领域都有他的领域知识以及对应的能力要求。

​ 但是到底什么是领域呢?其实,领域的核心是另一个很好理解的词:边界

在这里插入图片描述

​ 大家想一想,当我们说Java是一个领域的时候,是不是在强调Java和C、C++、Python等这些语言之间有一个明显的逻辑边界?当我们说软件是一个领域的时候,是不是在强调软件技术和硬件技术之间有一个明显的逻辑边界?当我们说技术是一个领域的时候,是不是在强调技术和运维、测试、项目管理等等这些工作之间有一个明显的逻辑边界?

​ 所以领域的本质其实就是边界。只要你形成了比较明显的逻辑边界,那么不管形式是什么,我们都可以形成一些领域。DDD中,其实强调的领域也就是这么一种形式。

​ 不过,这和我们做开发有什么关系呢?

​ 以我们现在习惯了的MVC开发方式为例,我们也会去做很多边界的划分。以一个电商项目为例,在设计一个电商项目的后端实现时,我们也会设计一些不同的Controller接口,负责不同的业务。比如用一个UserController来承接用户相关的业务逻辑。包括用户登录、注册、修改密码等等这些功能。同时也会用一个OrderController来承接订单这部分的业务,比如下订单、取消订单、订单退款等等这些操作。其实这时候你看,UserConntroller和OrderController之间,是不是就形成了一个井水不犯河水的逻辑边界?

在这里插入图片描述

​ 别管形式是什么&#x

http://www.dtcms.com/a/203015.html

相关文章:

  • 安装完dockers后就无法联网了,执行sudo nmcli con up Company-WiFi,一直在加载中
  • java基础-异常
  • CompleteableFuture的异步任务编排
  • MySQL的安装及相关操作
  • MySQL 自启动时报错can‘t create PID file: No such file or directory
  • 基于天猫 API 的高效商品详情页实时数据接入方法解析
  • 麒麟系统编译osg —— 扩展篇
  • 系统架构设计(十六):敏感点、权衡点、风险点和非风险点
  • EtherCAT通信协议
  • 题解:AT_abc244_e [ABC244E] King Bombee
  • vue+three.js 五彩烟花效果封装+加载字体
  • Go语言实战:使用 excelize 实现多层复杂Excel表头导出教程
  • idea 插件开发自动发布到 nexus 私服中(脚本实例)
  • 随记1-LLM多轮对话的陷阱
  • LTX-Videov本地部署教程:时空扩散+多尺度渲染,重塑AI视频研究范式
  • 至此(day1-day4)代码详解(ai辅助整理)
  • Python代码加密与发布方案详解
  • 计算机图形学Games101笔记--几何
  • leetcode字符串篇【公共前缀】:14-最长公共前缀
  • NebulaGraph学习笔记-SessionPool之Session not existed
  • 常见高速电路设计与信号完整性核心概念
  • SVA 断言16.9 Sequence operations序列运算翻译笔记(12)
  • 香港科技大学(广州)智能制造理学硕士招生宣讲会——深圳大学专场
  • Nextjs App Router 开发指南
  • leetcode 找到字符串中所有字母异位词 java
  • 百度网盘加速补丁v7.14.1.6使用指南|PC不限速下载实操教程
  • 你知道mysql的索引下推么?
  • Doris高性能读能力与实时性实现原理
  • 【优秀三方库研读】在 quill 开源库中 QUILL_MAGIC_SEPARATOR 的作用是什么,解决了什么问题
  • 【Java】封装在 Java 中是怎样实现的?