领域驱动设计(Domain Driven Design)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、场景和要求
  • 二、领域模型关键词
    • 1.领域
    • 2.子域
    • 3.通用语言
    • 4.限界上下文
    • 5.领域模型
    • 6.实体和值对象
    • 7.聚合根
    • 8.领域服务
    • 9.领域事件
  • 总结


前言

Domain Driven Design(领域驱动设计, DDD),不是一种架构,而是一种架构方法论,是一种拆解业务、划分业务、确定业务边界的方法,是一种领域设计思想。

一、场景和要求

在这里插入图片描述

DDD(领域驱动设计)实际上是一套软件架构设计的方法论,我们可以在此之上更好的理解业务。并且我们可以根据这套方法论进行架构风格填充,包括微服务架构,面向服务架构,REST风格架构以及六边形架构等等。

解决的问题:软件开发完成后,因需求的变更导致软件不得不增加新的功能,软件越来越冗余,导致最后不得不重构,领域驱动设计能分析好领域相关的业务逻辑,确定好边界,确定同一沟通预言,让软件通过领域模型设计后,更易于扩展。
在这里插入图片描述

二、领域模型关键词

在这里插入图片描述

1.领域

领域其实就是我们的范围,而范围实际上就是我们的边界,我们做什么,做到什么程度,最低多少 ,最高多少。
领域其实就是我们的范围,而范围实际上就是我们的边界,我们做什么,做到什么程度,最低多少 ,最高多少。
比如 电商 就是一个领域 ,金融是一个领域,教育是一个领域,你要确定你做的软件产品,具体的领域边界,分析涉及到的数据,业务规则,流程,然后通过面向对象的方式建立一个模型,再选择合适的技术实现。

2.子域

领域太过于复杂,业务太过于分散,这个时候我们做一个拆分,把领域划分成子域,比如电商系统很复杂,将他拆分成比如一个个的模块,订单,商品,库存,甚至我们的模块还能进行细分,比如库存,可以分为本地库,异地库,三方托管库。划分子域 1 是分治,2是可以对子域进行分析,重要的子域加资源。

  1. 核心域(子域):业务核心,核心的竞争力,因为企业愿景不同,领域愿景也不同,核心域也不同,说白了,就是你们项目最初立项的目的是什么,目标是什么。为什么要做这个项目。核心域的范围并不一定是一次就能确认的,可能需要迭代很多次,每一次都有可能扩大或缩小
  2. 通用域(子域):整个领域都能够用到的子域,比如我们的认证,权限等等相关的模块,这就是我们的通用域。
  3. 支撑域(子域):支撑域实际上就是不包含核心竞争力的功能,也不包含通用的功能,但是又是必须的支撑。

3.通用语言

沟通的桥梁,必须要有一个东西能够让我们的团队人员交流起来有一个标准。并且他还需要能够正确的,简单的,清晰的表达业务。让我们的技术专家,业务人员,产品,测试,架构都能够达成共识,并且协同合作。这个叫做通用语言,类似需求文档里的词语解释,就是让大家能在同一维度进行高效的交流沟通。

4.限界上下文

限界和上下文。限界就是领域的边界,也就是范围,而上下文则是语义环境。通过领域的限界上下文,我们就可以在统一的领域边界内用统一的语言进行交流。

5.领域模型

领域模型是对领域内的概念类或现实世界中对象的可视化表示,领域模型是用来描述业务对象之间的引用关系。

  1. 业务角色,业务角色表示的是一个角色承担的一系列责任。比如收银员,他的责任是计算商品价格,收钱,找零,甚至退换货。
  2. 业务实体,业务实体表示的是其实你使用或者可交付的工件,资源,事件。比如电商项目中的商品。你需要给卖家打印的发票。
  3. 业务用例,实际上业务用例显示的是协作角色与业务实体之间如何执行工作流程,也就是我们的业务链路

6.实体和值对象

  1. 实体:正常的实体对象,有唯一键标识,就算所有字段内容一样也不是一个,例如学生,id,姓名,年龄,就算姓名年龄一样,也不是一个。
  2. 值对象:没有唯一性标识,例如 学生实体上有一个地址,这个地址是一个对象,里面字段为,省,市,街道,详细地址,这个地址信息对象就是值对象。

7.聚合根

平常我们有的实体比较复杂,为了满足业务,有可能会弄出一个非常复杂的实体,里面包含很多实体,跟这个类似,这里的聚合是指同一生命周期,同一业务域的实体聚合成一个聚合根,也就是最外面的实体,并且这个实体管理者里面的所有实体,外面只能通过聚合根进行任何和请求,聚合根再对里面进行操作,这里我感觉就是高内聚,聚合根不易过大。

8.领域服务

领域服务代表了领域的概念,是问题域中的行为,与领域专家对话中产生,肯定是通用语言的一部分。比如计价、认证
某些行为不适合放在任何一个实体中,尝试强制归属实体时就该考虑用领域服务了。
代表行为、不具备身份、无状态是领域服务的特点。

9.领域事件

事件驱动,有一些代码逻辑,例如下单,后面有很多操作,一般我们一个下单方法里会包含好几个子方法,并且带有if,时间长了会非常冗余,并且方法越来越大,事件驱动就是,当下单之后发一个事件(mq)如果需要做一些操作,多个端接收这个消息事件,然后做自己的操作就行,扩展的话就多一个接收方,对之前代码无侵入修改。

领域专家所关心的发生在领域中的一些事件。
将领域中所发生的活动建模成一系列的离散事件。每个事件都用领域对象来表示…领域事件是领域模型的组成部分,表示领域中所发生的事情。

总结

每日一小结,进步一大节

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/260406.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

环信IM Android端实现华为推送详细步骤

首先我们要参照华为的官网去完成 ,以下两个配置都是华为文档为我们提供的 1.https://developer.huawei.com/consumer/cn/doc/HMSCore-Guides/android-config-agc-0000001050170137#section19884105518498 2.https://developer.huawei.com/consumer/cn/doc/HMSCore…

JAVA高并发——人手一支笔:ThreadLocal

文章目录 1、ThreadLocal的简单使用2、ThreadLocal的实现原理3、对性能有何帮助4、线程私有的随机数发生器ThreadLocalRandom4.1、反射的高效替代方案4.2、随机数种子4.3、探针Probe的作用 除了控制资源的访问,我们还可以通过增加资源来保证所有对象的线程安全。比如…

继续教育公需科目试题及答案,分享几个实用搜题和学习工具 #经验分享#经验分享

大学生活是一个充满挑战和机遇的阶段,在这个阶段,我们需要不断提升自己的学习能力和技巧。而寻找适合自己的学习工具也成为了我们必须面对的任务。幸运的是,现在有许多日常学习工具可以帮助我们更好地组织学习、提高效率。今天,我…

SQL Developer 小贴士:显示Trace文件

SQL Developer可以识别trace文件,而无需利用tkprof进行转换。 在数据库服务器上生产trace文件。例如: alter session set tracefile_identifierdemo01_02;alter session set sql_tracetrue;-- your SQL here, for example select * from hr.employees;a…

什么是渲染?渲染有几种类型?渲染100邀请码1a12

渲染是CG作业的最后一步,根据分类依据不同,有以下几个类型: 1、操作响应 根据对渲染结果的响应要求和实现原理不同,渲染可分为离线渲染、实时渲染和混合渲染。离线渲染通常在本地进行,由电脑生成画面,时间从…

TimeDad 简单的PC使用时间控制软件

TimeDad 起因 过年教家里的小朋友玩我的世界,这家伙着了魔,每天霸着电脑,说梦话都是挖矿。 找了time boss破解版用了一段时间,破解失效了。找了一圈软件发现功能都好复杂,要收费的,没办法,娃…

MySQL中SQL语句的执行流程(高频考点)

文章目录 前言SQL语句的执行流程查询语句的执行流程更新语句的执行流程 总结 前言 昨天跟大家讲了MySQL的基础架构(链接:MySQL的基础架构),今天讲一讲我们的高频面试题MySQL中SQL语句的执行流程。 建议看完 MySQL的基础架构 再来…

二维红外流程

x.1 开激光器 先将TDG,TCU,Empower打开,等一分钟后将TDG和Empower的钥匙打到On上; 按顺序先后开MaiTai;ACE;TOPAS;AOM; 测量ACE出光口处功率(3.8w)&#x…

红队打靶练习:IMF: 1

目录 信息收集 1、arp 2、nmap 3、nikto 目录探测 gobuster dirsearch WEB 信息收集 get flag1 get flag2 get flag3 SQL注入 漏洞探测 脱库 get flag4 文件上传 反弹shell 提权 get flag5 get flag6 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# a…

java+vue_springboot企业设备安全信息系统14jbc

企业防爆安全信息系统采用B/S架构,数据库是MySQL。网站的搭建与开发采用了先进的java进行编写,使用了vue框架。该系统从三个对象:由管理员、人员和企业来对系统进行设计构建。主要功能包括:个人信息修改,对人员管理&am…

爬虫入门一

文章目录 一、什么是爬虫?二、爬虫基本流程三、requests模块介绍四、requests模块发送Get请求五、Get请求携带参数六、携带请求头七、发送post请求八、携带cookie方式一:放在请求头中方式二:放在cookie参数中 九、post请求携带参数十、模拟登…

C++11---(3)

目录 一、可变参数模板 1.1、可变参数模板的概念 1.2、可变参数模板的定义方式 1.3、如何获取可变参数 二、lambda表达式 2.1、Lamabda表达式定义 2.2、为什么有Lambda 2.3、Lambda表达式的用法 2.4、函数对象与lambda表达式 三、包装器 3.1、function 3.2、bind …

智慧公厕是什么?智慧公厕对智慧城市的意义

城市的信息化发展需要催化了智慧城市,公共厕所作为城市的重要民生设施,如何实现更高阶的信息化建设,成为一个重要课题。那么,智慧公厕是什么?为什么它对智慧城市的建设如此重要?本文以智慧公厕源头厂家广州…

前端新手Vue3+Vite+Ts+Pinia+Sass项目指北系列文章 —— 第十二章 常用工具函数 (Utils配置)

前言 在项目开发中,我们经常会使用一些工具函数,也经常会用到例如loadsh等工具库,但是这些工具库的体积往往比较大,如果项目本身已经引入了这些工具库,那么我们就没有必要再引入一次,所以我们需要自己封装…

如何利用Idea创建一个Servlet项目(新手向)

💕"Echo"💕 作者:Mylvzi 文章主要内容:如何利用Idea创建一个Servlet项目(新手向) Servlet是tomcat的api,利用Servlet进行webapp开发很方便,本文将介绍如何通过Idea创建一个Servlet项目(一共分为七步,这可能是我们写过的…

微软和OpenAI将检查AI聊天记录,以寻找恶意账户

据国外媒体报道,大型科技公司及其附属的网络安全、人工智能产品很可能会推出类似的安全研究,尽管这会引起用户极度地隐私担忧。大型语言模型被要求提供情报机构信息,并用于帮助修复脚本错误和开发代码以侵入系统,这将很可能会成为…

用tensorflow模仿BP神经网络执行过程

文章目录 用矩阵运算仿真BP神经网络y relu ( (X․W ) b )y sigmoid ( (X․W ) b ) 以随机数产生Weight(W)与bais(b)placeholder 建立layer函数改进layer函数,使其能返回w和b github地址https://github.com/fz861062923/TensorFlow 用矩阵运算仿真BP神经网络 impo…

路径相关树形dp——最长乘积链

路径相关树形dp——最长乘积链 问题描述 给定一棵树,树中包含n个结点,编号为1~n,以及n- 1条无向边,每条边都有一个权值。 现从树中任选一个点, 从该点出发,在不走回头路的情况下找出二条到其他点的路径&…

keil5代码复制下来中文乱码

在keil5中,显示正常,如果复制到其他编辑器,中文部分就乱码。 keil5中显示正常 复制到其他编辑器,中文乱码。 原因:编码格式不一样 解决办法:keil5中重新设置一下。 左边选择Edit,下面选择Conf…

第3.3章:StarRocks数据导入--Stream Load

一、概述 Stream Load是StarRocks常见的数据导入方式,用户通过发送HTTP请求将本地文件或数据流导入至StarRocks中,该导入方式不依赖其他组件。 Stream Load作是一种同步导入方式,可以直接通过请求的返回值判断导入是否成功,无法手…