yang模型中rpc_领域驱动模型(DDD)设计讲解
一. 什么是领域驱动模型(DDD)?
领域驱动模型一种设计思想,我们又称为DDD设计思想。是一种为了解决传统设计思想带来的维护困难,沟通困难和交互困难而产生的一种新的思想。也解决了在部分公司中,一个项目组就是一套服务,不同项目组中又相互通过RPC访问,相互之间交互的安全保障。
二. 领域驱动模型解决了什么问题
在传统微服务的单服务设计上,我们通常只顾自己开发,只顾自己业务,只管理自己数据库,一旦其他服务需要使用另一个服务上的某些功能时,我们通常需要使用HTTP来内网访问达到目的,或是使用RPC来访问业务。首先假设我们需要用HTTP来访问其他服务接口,首先,我们需要知道对应服务的URL,其次需要开发方提供对应的参数VO,一旦VO变化,开发方忘记通知下游业务方,下游业务方是无法感知的。接下来会讲解模型中每一层概念,会一步步证明领域驱动模型的出现,降低了微服务下,服务之间的耦合程度,提高了内聚力。
三. 设计领域驱动模型
传统设计模型:
领域驱动模型:
以下介绍的层级,即是领域驱动模型中代表的各个领域,去负责自己的范围:
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层中实现。
意义:第三方内容独立化,便于管理与维护。
yang模型中rpc_领域驱动模型(DDD)设计讲解相关推荐
- 领域驱动模型(DDD)学习笔记
在复杂的业务中,DDD正在逐步取代MVC模型,下面就让我们一起来认识一下领域驱动模型(DDD). 文章目录 一.DDD架构风格 二.DDD架构实现图 1. User Interface层 1.1 DT ...
- 领域驱动模型(DDD)
领域驱动模型(DDD) 文章目录 领域驱动模型(DDD) 1. 简介 2. 一些基本概念 实体(entity) 值对象(value object) 聚合及聚合根(aggregate.aggregate ...
- 领域驱动模型VO,BO,PO,DO,DTO概念及其区别
本文来说下领域驱动模型VO,BO,PO,DO,DTO 概念及其区别 文章目录 概述 概念以及区别 本文小结 概述 随着编程工业化水平的不断加深,各种编程模型层出不穷(比如MVC,MVP等等),伴随着这 ...
- 谈谈微服务架构中的领域驱动设计
谈谈微服务架构中的领域驱动设计 https://mp.weixin.qq.com/s/43HSud6ijdVzPA_wdLrxzQ 谈谈微服务架构中的领域驱动设计 本文是关于领域驱动设计与微服务架构结 ...
- linux 统一设备模型 pci,Linux设备驱动模型摘抄
Linux设备驱动模型摘抄Linux设备驱动模型摘抄Linux设备驱动模型摘抄Linux设备驱动模型摘抄Linux设备驱动模型摘抄 Linux设备驱动模型摘抄(1) Linux统一设备模型 简介 Li ...
- 领域驱动模型VO,BO,PO,DO,DTO概念介绍和区别
先来一张图,有一个直观地感受: 概念介绍 VO(View Object)视图对象 用于展示层(和控制层Controller共同属于表现层),它的作用是把某个指定页面(或组件)的所有数据封装起来.说白了 ...
- Uboot中的DM驱动模型
这一篇我们学习uboot中的驱动模型的初始化,在uboot中,驱动模型被称为Driver Model,简称DM.这种驱动模型为uboot中的各类驱动提供了统一的接口. 1. 数据结构及概念 DM模型主 ...
- 在项目中引入领域驱动设计的经验
Chris Patuzzo近期在一次演讲中介绍了领域驱动设计(DDD)的原则,并结合一个基于Ruby on Rails的真实项目进行讲解.在这次项目之前,Chris所在的团队为重新设计公司的主营网站所 ...
- 演进架构中的领域驱动设计
原文链接:http://www.infoq.com/cn/articles/ddd-evolving-architecture 作者 Mat Wall and Nik Silver 译者 王丽娟 发布 ...
最新文章
- linux一条命令添加用户并设置密码,linux中如何通过命令行来添加用户并设置密码...
- 13---Net基础加强
- android 手机号码去重,第135天:移动端开发经验总结
- 多年前那些优秀的工程师,后来都去哪儿了?
- 7.3 MASS批量修改数据(Excel文件上传数据)
- 95-38-150-Buffer-CompositeByteBuf
- spring cloud超时时间设置
- 【机器学习】径向基(RBF)神经网络的tensorflow实现
- Zookeeper学习笔记——1 单机版本环境搭建
- VS2010 在Win 7 附加w3wp.exe进程进行调试
- (8)matplotlib 将点连成线
- html中支持的常用中文字体
- 新装的电脑没有打开图片的软件怎么办?教你打开Windows照片查看器
- 不用光盘,教你一招让win10系统恢复出厂设置
- Google Chrome 扩展程序
- ShaderToy Matlab OpenGL实现流动Love
- mvn No proxies configured downloading directly
- 揭开“QUIC”的神秘面纱
- opencv膨胀操作
- 2021年东莞东华中学高考成绩查询,东莞中学排名前十名,2021年东莞中学排名一览表...
热门文章
- 国内厂商 Onyx 违反 GPL 协议,中国开源何去何从?
- Facebook面向所有用户开放人脸识别功能;福布斯美国最具创新力领袖公布;AMD:将发新BIOS 优化三代锐龙加速性能……...
- OpenStack精华问答 | 如何处理常见故障?
- 语音识别现状与工程师必备技能
- mvn install java版本,maven的打包命令--assemblyinstall和maven update之后jdk版本变回1.5的问题...
- 电脑两边黑边怎么还原_Mac电脑录制的视频有黑边?如何解决
- 怎么测试服务器的性能,如何测试服务器性能
- linux测试手柄,Linux Joystick 介绍
- SpringBoot 整合 Shiro Thymeleaf Mysql 动态授权
- node+express创建第一个node项目