分层软件架构及其数据解耦
1. 分层软件架构
分层架构是软件的软件中最常用的架构设计方法,如clean架构、MVP架构等。
分层的实质是隔离关注点,使得每一层具有一致的行为,这样不同的开发才有可能关注不同的软件层。如WEB开发中常用的前后端分离,前端关注的是用户体验,后端关注的是稳定可靠的服务。再比如DDD中主张将领域和应用进行分离,从而能够获得一个比较稳定的领域能力层。
解耦的本质是分离变化点,将不同的变化点分离到不同的层次或模块中,使得其职责更单一,从而有利于软件的开发、维护和扩展。
因为用户对其完成某一系列业务case的完整性并没有随着解耦而消失,因此在分层的软件架构中除了分和解,还要有合。通过聚合层、各类中间件sdk等来完成用户的具体业务case。
分、解、合中,分和解是软件研发组织内部的诉求,不是用户诉求,主要完成用户界面、业务逻辑和数据存储几大类任务的分层和解耦。合是基于分和解的结果,实际是其难度更大,否则会造成合的结果耦合过重导致难于维护。因此,分和解时要考虑到合,只有同时考虑到分、解、合的架构才是一个完整的架构。
2. 各软件层间的数据解耦和转换
采用分层的软件架构后,在各个软件层上都要有自己的数据模型,但由于用户业务的完整性,各个软件层的数据又需要相互转换,从而完成软件的“分”与“合”。各个软件层的数据模型一般要满足如下约束:
每个软件层只能使用自己的数据模型
软件层间的数据模型通过转换器相互转换
分层架构中常用的数据模型是VO、DTO、 DO和PO,解析如下:
VO(View Object):视图对象,用于表示层,它的作用是封装页面(或组件)的数据
DTO(Data Transfer Object):数据传输对象,用于表示层与服务层之间的数据传输对象
DO(Domain Object):领域对象,从现实世界中抽象出来的有形或无形的业务实体
PO(Persistent Object):持久化对象,它跟持久层(通常是数据库)的数据结构形成一一对应的映射关系,如果持久层是关系型数据库,那么,数据表中的每个字段(或若干个)就对应PO的一个(或若干个)属性
其中,各个数据模型的转换关系如下:
用户发出请求,其请求中的数据在UI层表示为VO
UI层把VO转换为业务层对应方法所要求的DTO并传送给服务层(在WEB开发中,DTO为API接收到的参数)
业务层首先根据DTO的数据构造(或重建)一个DO,调用DO的业务方法完成具体业务
业务层把DO转换为存储层对应的PO,调用相应的存储层的持久化方法,把PO传递给它,完成存储操作
对于逆向操作,如读取,也采取类似的方法进行转换和传递
个人博客地址
分层软件架构及其数据解耦相关推荐
- 数据中台 第7章 数据体系建设:数仓分层设计、数据建模
数据中台数据体系是在全域原始数据的基础上,进行标准定义及分层建模,数据体系建设最终呈现的结果是一套完整.规范.准确的数据体系,可以方便支撑数据应用. 中台数据体系应具备以下特征: ·覆盖全域数据:数据 ...
- 数据仓库物理分层_大数据之数据仓库分层
大数据之数据仓库分层 什么是数据分层? 数据分层的好处 一种通用的数据分层设计 举例 各层会用到的计算引擎和存储系统 分层实现 数据分层的一些概念说明 7.大数据相关基础概念 1. 什么是数据分层? ...
- 一站式VDI部署教程(3)配置存储分层和重复数据删除功能
1)打开添加服务器角色和功能向导,点击下一步 2)勾选数据删除重复功能 3)点击安装 4)安装完成后,点击存储池,然后新建存储池. 5)输入名称,并点击下一步 6)勾选要加入的磁盘,然后点击下一步. ...
- TaxoNN:基于分层微生物组数据的集成神经网络用于疾病预测
<TaxoNN ensemble of neural networks on stratified microbiome data for disease prediction > 发表时 ...
- 大容量存储方案_精细化存储分层,西部数据赋能多场景解决方案
我们每天的活动都产生着大量的数据. 近日,中国国家信息中心主任刘宇南在国家公共数据开放平台建设地方专题会上表示--到2025 年,中国数据总量预计将跃居世界第一,全球占比有望达到27%以上.这大多数需 ...
- 内置虚拟化,自动分层,重复数据删除,固态硬盘,IBM Storwize V7000亮点解析
最近IBM 新一代中端虚拟存储产品Storwize V7000在业内反响挺大,Storwize V7000是一款被IBM寄予厚望的产品,在发布这款新品之前,IBM特意为其制作了具有强烈神秘感的广告,并 ...
- 解耦,未解耦的区别_受干净架构启发的解耦php架构
解耦,未解耦的区别 This article would not be possible without the help of Rodrigo Jardim da Fonseca, Edison J ...
- 五万字 | Flink知识体系保姆级总结
本文目录: 一.Flink简介 二.Flink 部署及启动 三.Flink 运行架构 四.Flink 算子大全 五.流处理中的 Time 与 Window 六.Flink 状态管理 七.Flink 容 ...
- 数仓建设(离线和实时)
文档大纲: 一.数仓基本概念 1. 数据仓库架构 我们在谈数仓之前,为了让大家有直观的认识,先来谈数仓架构,"架构"是什么?这个问题从来就没有一个准确的答案.这里我们引用一段话:在 ...
最新文章
- python中格式符的应用%s,%d,%f以及format()的实例以及输出格式
- docker镜像创建redis5.0.3容器集群
- +智能”时代,华为如何将AI赋能到各行各业?
- NLP word2vec paper
- Linux 配置jdk
- 使用JUnit规则进行干净的集成测试
- vbs if 不等于_6、if语句和关系表达式
- 什么是ETL?一文掌握ETL设计过程
- Python学习笔记,爬取笔趣阁小说
- websocket连接相关的几个问题
- SQL Server 全文索引的管理
- mysql server 6.0_MySQL Server 6.0完全卸载以及卸载中遇到的问题
- (转)霍华德·马克斯:警惕那些人人都追捧的事物
- hping3 使用 (构造dos攻击)
- 自定义形状的ImageView制作
- 超像素经典 SLIC 算法 python 实现
- 台式电脑出厂编号怎么查_出厂编号的查询方法
- Base64 erlang
- 江苏大学毕业设计TEX排版(三)
- java jsp聊天系统_java web实现简单聊天室
热门文章
- 卧龙图甄选 | 酒桌上的变化,非主流到主流的历史
- windows ftp 227 Entering Passive Mode
- Nature reviews neuroscience:后扣带皮层的三分观点
- zabbix集成openldap认证
- Apache Beam实战指南 | 玩转KafkaIO与Flink
- 如何刷新dns缓存 刷新dns缓存命令(ipconfig /flushdns)
- 项目实施管理过程中问题自我总结
- PLS-00103: 出现符号 “BEGIN“在需要下列之一时: := . ( @ % ; not null range default character
- 2023黑龙江科技大学计算机考研信息汇总
- python Http客户端urllib3包使用