yang模型中rpc_领域驱动模型(DDD)设计讲解

一. 什么是领域驱动模型(DDD)?

领域驱动模型一种设计思想,我们又称为DDD设计思想。是一种为了解决传统设计思想带来的维护困难,沟通困难和交互困难而产生的一种新的思想。也解决了在部分公司中,一个项目组就是一套服务,不同项目组中又相互通过RPC访问,相互之间交互的安全保障。

二. 领域驱动模型解决了什么问题

在传统微服务的单服务设计上,我们通常只顾自己开发,只顾自己业务,只管理自己数据库,一旦其他服务需要使用另一个服务上的某些功能时,我们通常需要使用HTTP来内网访问达到目的,或是使用RPC来访问业务。首先假设我们需要用HTTP来访问其他服务接口,首先,我们需要知道对应服务的URL,其次需要开发方提供对应的参数VO,一旦VO变化,开发方忘记通知下游业务方,下游业务方是无法感知的。接下来会讲解模型中每一层概念,会一步步证明领域驱动模型的出现,降低了微服务下,服务之间的耦合程度,提高了内聚力。

三. 设计领域驱动模型

传统设计模型:

2e104c2d9559627021e56e5d1c2e416b.png

领域驱动模型:

e2d9dca7eb3415d318a53754ad252ac4.png

以下介绍的层级,即是领域驱动模型中代表的各个领域,去负责自己的范围:

API层:

作用:存放要对外暴露的RPC接口的service层。

意义:其他服务不需要了解自身服务的业务实现,这一层很薄,只需要提供出去,其他服务知道它是干嘛的,就足够了,即让其他服务调用了自身业务,又没有暴露自身的业务实现,降低安全风险。

Web层:

作用:可以对等于传统设计的controller层,用来处理参数校验,转发等一些简单的业务。

意义:与Service层剥离,其目的是为了保障biz层的独立性,但是在maven结构中又引用biz层,可以理解为biz的下游,当需要biz处理业务的时候,通知biz帮忙处理,但是不参与biz层的业务实现,只提交对应参数。

Biz层:

作用:biz是Business的缩写,即业务逻辑层,可以对等于传统设计的Service层,存放的业务逻辑,biz中也存在service,biz中的service存放的是内部使用,不对外提供的service。api层和biz层的service业务逻辑实现都存放在biz层中。

意义:剥离业务逻辑,防止业务逻辑暴露,同时与dal层剥离,保证自身独立性,不与dal层耦合。这一层也是服务核心层,是处理下游提交的需求与数据之间交互的重要层级。

dal层:

作用:dal是Data Access Layer的英文缩写,即数据访问层,可以对等于传统设计的Dao层,主要是用来负责与数据的交互,比如Mysql、ES、HBase等。通常我们的Mybatis的Mapper和JPA就在这一层编写。

意义:让业务与数据隔离,dal层成为了biz层的上游,负责为biz的业务实现提供对应数据。同时dal与数据中间件直接映射,形成绑定关系,其他服务需要接手数据层,可以直接引用,达到高内聚的目的,又降低了代码的耦合性,提高了开发效率。

domain层:

作用:存放一些通用的,可以对外暴露的Object、Enum等。

意义:通常用来制定一些标准,比如共同使用的枚举、常量的定义,一般作为上游服务,提供给下游服务,需要按照标准实施的内容。

config层:

作用:存放一些通用的配置,如缓存、中间件、日志和消息消费等通用配置,注意一点的是,消息消费简单的处理是放在该层,涉及到本服务数据交互的业务,还是需要写在biz层,在biz中去实现较为复杂的业务,消息消费放在该层中也是为了便于维护。

意义:配置独立化,便于管理与维护。

client层:

作用:存放调用第三放平台,外部服务等RPC或HTTP接口服务等。如通过pom引入其他服务的api层,编写调用http接口的实现,但与本服务数据交互的业务仍在biz层中实现。

意义:第三方内容独立化,便于管理与维护。

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

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

相关文章

鸿蒙系统操作界面跟苹果很像,鸿蒙手机UI界面曝出!图标拟物化、操作逻辑近似苹果iOS13...

原标题:鸿蒙手机UI界面曝出!图标拟物化、操作逻辑近似苹果iOS13​【IT爆料王-原创文章-具备版权效力】就在近日,笔者收到了网友的匿名私信,提供给笔者华为鸿蒙系统的UI界面截图,以及搭载鸿蒙系统的华为手机的曝光图片。…

python3中的int类型占64位,有没有什么办法来强制Python来使用64位整数的Windows?

I’ve noticed that whenever any integer surpasses 2^31-1 my number heavy code suffers a large slowdown, despite the fact I’m using a 64 bit build of Python on a 64bit version of Windows. This seems to be true on Python 2.7 and Python 3. I’ve read that Wi…

crtsiii型无砟轨道板_无砟轨道裂缝破损怎么修补

随着高速铁路、客运专线、城市地铁的快速发展,无砟轨道轨道板(道床板)广泛应用,但施工中和运营期都发现轨道板混凝土存在不同程度的微细裂缝,对无砟轨道造成了一定的病害。高铁轨道板裂缝是不可避免的。为确保无砟轨道…

c调用python第三方库_Python使用ctypes模块调用DLL函数之C语言数组与numpy数组传递...

在Python语言中,可以使用ctypes模块调用其它如C语言编写的动态链接库DLL文件中的函数,在提高软件运行效率的同时,也可以充分利用目前市面上各种第三方的DLL库函数,以扩充Python软件的功能及应用领域,减少重复编写代码、…

妲己机器人怎么升级固件_台湾重金设计的3D妲己,亮瞎了

大家还记得前几天米醋分享的国内首档二次元选秀,遭网友疯狂吐槽:不知道怎么形容的丑!当米醋看到了这档综艺的宣传海报时瞬间被这一批选手的颜值所吸引!太魔幻了!没成想看到3D人物效果时米醋却被这盛世丑颜丑到裂开&…

go语言通道插入0_Go语言入门必知教程-通道

Golang提供了一种称为通道的机制,用于在协程之间共享数据。当函数作为协程执行并发活动时,需要它们共享资源或数据,通道便充当协程之间的管道(管道),提供一种确保同步交换数据的机制。需要在声明通道时指定数据类型,可…

aes加密字符串c++_springboot2.2.X手册:防抓包?快速实现API接口数据加密

溪云阁:专注编程教学,架构,JAVA,Python,微服务,机器学习等,欢迎关注上一篇:springboot2.2.X手册:redis的7种类型100个方法全解析有没有遇到这样子的接口,放到…

鸿蒙系统打造完备终端,搭载鸿蒙系统的手机很快推出,华为生态更加完善

2019年的8月9日,在华为开发者大会上华为向大家正式的发布了一款操作系统——鸿蒙系统。这个系统备受大家的关注,鸿蒙2.0的发布也在时刻期待中。因为在目前的操作系统中,华为的鸿蒙操作系统是仅次于安卓、ios的存在,而今日&#xf…

curl socket 访问_使用Curl、socket、file_get_contents三种方法POST提交数据 | 学步园

# <?php # /**# * Socket版本# * 使用方法&#xff1a;# * $post_string "appsocket&versionbeta";# * request_by_socket(facebook.cn,/restServer.php,$post_string);# */# function request_by_socket($remote_server,$remote_path,$post_string,$port …

html 标签 r语言,从R中的字符串中删除html标签

我正在尝试将网页源代码读入R并将其作为字符串处理。我正在尝试删除段落并从段落文本中删除html标签。我遇到了以下问题&#xff1a;我尝试实现一个功能来删除html标签&#xff1a;cleanFunfunction(fullStr){#find location of tags and citationstagLoccbind(str_locate_all(…

python给图片加半透明水印_Python 批量加水印就这么简单!

工作的时候&#xff0c;尤其是自媒体&#xff0c;我们必备水印添加工具以保护我们的知识产权,网上有许多的在线/下载的水印添加工具&#xff0c;但他们或多或少都存在以下问题&#xff1a; 在线工具需要将图片上传到对方服务器&#xff0c;信息不安全。 很多工具不具备批量处理…

html 选中状态,html默认选中状态

html中标签用法解析及如何设置selec标签定义和用法 select 元素可创建单选或多选菜单。当提交表单时&#xff0c;浏览器会提交选定的项目&#xff0c;或者收集用逗号分隔的多个选项&#xff0c;将其合成一个单独的参数列表&#xff0c;并且在将 表单数据提交给服务器时包括 nam…

nemesis什么车_nemesis是什么意思_nemesis的翻译_音标_读音_用法_例句_爱词霸在线词典...

全部报应Was he aiming at Bryant, his old nemesis and a favorite target in the past?他是不是暗指科比, 一直的“竞争对手”和过去最中意的目标?期刊摘选After the defeat of their old arch nemesis, the Turtle have grown apart as a family.在击败旧时强敌后, 忍者神…

wxpython制作表格界面_[Python] wxPython 菜单栏控件学习总结(原创)

1、总结 1、大体创建过程 1、创建一个 菜单栏 : menuBar wx.MenuBar()相当于这个白色地方&#xff0c;没有File这个菜单 2、创建 菜单 : fileMenu wx.Menu()这两个不是直接“用的”&#xff0c;叫菜单。既用来分类其他 菜单项 的文件夹样 3、创建 菜单项 : newItem wx.MenuI…

android 8三星note8,信息太多很烦琐?告诉你三星Note8有妙招

不知从何时开始&#xff0c;我们眼前的信息变得丰富而繁杂。简洁的新闻无需经过报纸过滤&#xff0c;发生数分钟已经城皆知。预测晴雨也无需依靠天气先生&#xff0c;点亮手机即可洞悉风雨。生活在信息时代的我们仅用几英寸的窗口观察世界&#xff0c;信息的洪流难免会遮蔽眼前…

realloc函_realloc(重新分配内存空间的函数)

在头文件中定义void * realloc(void * ptr&#xff0c;size_t new_size);重新分配给定的内存区域。它必须预先分配malloc()&#xff0c;calloc()或realloc()尚未释放与free或呼叫realloc。否则&#xff0c;结果是不确定的。重新分配由以下两者之一完成&#xff1a;a)ptr如有可能…

python做excel表格教程视频_基于Python实现excel表格读写

首先安装对应的xlrd和xlwt 打开cmd命令窗口输入pip install xlrd和pip install xlwt就可以安装。之后输入pip list检查是否成功配置&#xff1a;xlrd操作# 接下来就是常用的语法操作&#xff1a; excel_data xlrd.open_workbook(文件路径)#得到对应的工作表 sheet excel_data…

虚无鸿蒙哪个厉害,【图说鸿蒙】鸿蒙设定之七柱神(五)

原标题&#xff1a;【图说鸿蒙】鸿蒙设定之七柱神(五)七柱神玄冥神飞来流去本无心&#xff0c;无空无我混天尘。幻作人形深简出&#xff0c;不是老妪是海神。玄冥神 虚无荒海司掌海洋、流动之力 神威之色为蓝执掌海洋、流动之力的神&#xff0c;是神道“熵”的最高掌控者&#…

java lambda 排序_Java8特性:Lambda表达式之概念篇

Java自诞生已经有十几个年头了&#xff0c;目前也已经发布了第十三个大版本&#xff0c;其中Java8是常用的版本中最新的一个版本。而Java8最大的特性就是&#xff1a;Lambda表达式、函数式接口和Stream流。本篇我只介绍Lamda表达式的概念以及简单使用&#xff0c;至于别的我打算…

jq获取表格里的checkbox_Python抓取网页表格(一)

Python有很多包可以抓取数据&#xff0c;如selenium、requests、scrapy、pandas&#xff0c;每个包都有其适用性&#xff0c;个人认为在抓取数据时&#xff0c;代码简洁性和数据获取的准确性是需要考虑的因素&#xff0c;时间快慢倒不用太在意&#xff0c;毕竟用python抓数据本…