前端 重构时需要注意的事项_前端数据层落地实践

160c7dd60b05700116eb977c8958a326.png

23c81be495d25208030a8f51d4a9a10a.png

源宝导读:天际移动平台经过重构改版,近期正式发布了1.0版本,我们在低代码开发方面做了进一步增强。本文主要围绕前端Model、前端业务逻辑(领域模型)、数据层与视图层解耦(包装器模式)3个方面,给大家分享一下统一数据层方案的设计思路和实现。

一、背景

    天际移动平台经过重构改版,近期正式发布了1.0版。在低代码开发方面进一步增强,内置了移动应用常用的系统组件,并提炼了表单和列表两大核心数据容器组件,使用了统一数据层解决方案。

42d9a0923a696798c6d33af2ccea5d98.png

    以移动应用常见的表单详情页面为例,在移动平台完成搭建到最终渲染,基本流程如下:

  1. 在平台注册获取表单详情数据的业务API,根据返回数据格式创建业务对象,业务对象包含业务字段。

  2. 拖拽表单容器到页面中,绑定数据源到注册的业务API。

  3. 拖拽表单组件,如文本框组件,绑定字段为当前业务API返回业务对象的字段。

  4. 页面渲染流程:

    1. 根据业务API返回的业务对象格式初始化前端Model。

    2. 表单容器调用领域服务获取业务数据、填充Model、透传表单组件。

    3. 表单组件根据绑定的业务字段动态解析Model数据进行渲染。

    本文主要围绕前端Model、前端业务逻辑(领域模型)、数据层与视图层解耦(包装器模式)3个方面,分享下统一数据层方案的设计思路和实现。

二、 前端Model

    相较于后端Model,前端Model更像是一个容器,用于存放后端接口返回的数据,是前端数据层的最上游,也是接下来一切数据流动的起点。除了存储接口返回的数据,一般前端维护一套Model还需要进行容错处理,即运行时类型校验,这对提高系统的健壮性有很大的帮助。

2.1、技术选型

    我们选用了mobx-state-tree(MST)实现数据层的Model,它是一种状态容器。MST的中心是活跃树的概念。每个树都具有形状(类型信息)和状态(数据)。从这棵活树上,会自动生成不可变的,结构共享的快照。

5843393852044e318370469f076ba934.png

    类型的设计使得它在设计时和运行时都可以用来验证类型正确性(设计时类型检查仅在TypeScript中起作用)。

运行时类型错误:

144245fa8db711949a9852cffdc0b056.png

设计时类型错误:

f61cf56693e28af27616cdf94fba6b78.png

2.2、实现细节

    根据数据容器组件绑定的业务API接口返回的业务对象元数据,动态生成该数据容器的前端model,并存储到数据Store。

    业务对象元数据示例:

74821b8722197e4e57705cbd1b379f15.png

动态生成前端model示例:

05aaa00cfa2ebedddbfb66419da9226d.png

三、前端业务逻辑(领域模型)

    在我们之前的《领域驱动设计DDD在前端应用的探索》分享中,详细说明了如何利用DDD分层架构,来实现前端业务逻辑解耦的理论性探索,简单回顾下。

3.1、前端业务逻辑解耦-DDD设计思路

0047a52596ad86830be678fefd4ed86f.png

50c9c2c571abea2067e4e7f9f6c627ba.png

72bae02df264a9b8162cd6ce956ab214.png

9c73014f3bd8a7c256a33f8c298a2a34.png

108b3c3041f4c9ec61c05627680cc5cd.png

3.2、实现细节

领域实体:

c2434c433845f7f24d9c1b552eec7185.png

领域服务:

df4c1aebf4a641c1ccd1bacf9afdae92.png

四、数据层与视图层解耦(包装器模式)

    统一了数据层以后,组件只用来渲染数据,内部不用做数据相关的处理,更加轻量化。而数据层与组件渲染(视图层)是通过包装器模式进行解耦的。

    在主流前端框架(React或Vue)中的高阶组件HOC,就是采用这种设计模式,移动平台是基于Vue技术栈开发的。

4.1、我们封装了一个渲染被包装组件的方法 renderWrappedComponent

48c8471ae570d5783bcf73abe4c3b95d.png

4.2、创建数据容器包装器dataContainerWrapper

  • created阶段初始化数据Model存储在数据Store。

  • mounted阶段请求业务数据并填充到前端Model。

  • render阶段将前端Model数据传递给实际的组件进行渲染。

  • 包装器与数据层数据是通过MobX进行关联的,通过observer观察数据变化,响应式更新包装器。

e7e1d794c329261d94786ea1cfc90476.png

43e46357f957fb1bad908014afa5f368.png

4.3、在组件渲染时通过数据容器Connect,将组件与包装器连接起来

a6dcf14bbaf191f8b1231b7fd3fb067e.png

8404b1d45b57895282ef7c8a9ef99b85.png

五、总结

    当前主流的前端框架在数据层上是缺失的,本次实践结合前端Model、前端领域模型、数据层与视图层解耦等方面,形成了一个可落地的解决方案,这也是一个趋势,感兴趣的可以深入了解下。

------ END ------

作者简介

陈同学: 开发SM,目前负责天际移动平台的相关研发工作。

也许您还想看

移动建模平台元数据存储架构演进

AI云店小程序演变之路

基于 Go 的微服务运行情况监控实践

在明源云客,一个全新的服务会经历什么?

云客后台优化的“前世今生”(一)

5f8d0da67179d5979ebe01fa282131a3.png

3dbca3e43cc0a1f349711578cef9caf8.png

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

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

相关文章

postconstruct_@PostConstruct注解,你该好好看看

在最近的工作中,get到一个很实用的注解,分享给诸位。痛点做过微信或支付宝支付的童鞋,可能遇到过这种问题,就是填写支付结果回调,就是在支付成功之后,支付宝要根据我们给的地址给我们进行通知,通…

Unity URP运动模糊效果Shader

实现原理 见这篇文章Unity Shader-深度相关知识总结与效果实现(LinearDepth,Reverse Z,世界坐标重建,软粒子,高度雾,运动模糊,扫描线效果)_puppet_master的专栏-CSDN博客_shader深度…

线性系统的频率响应分析实验报告_动态系统的建模与分析

参考:DR_CAN1.介绍解决一个控制系统的问题:对研究对象进行分析控制器设计测试分析被控对象的物理特性及动态表现,在这个基础上建立数学模型,数学模型可以是动力学模型、热力学模型、流体力学模型和经济学模型等,然后在…

android 生命周期_Android生命周期组件 Lifecycle 源码详解(一)

在上篇文章:warmcheng:Android生命周期组件 Lifecycle 使用详解​zhuanlan.zhihu.com中,我们讲了 Lifecycle 的简单使用,本篇我们来研究下它的源码。 基础环境搭建首先,按照上篇文章所讲,快速搭建环境。添加…

Leetcode1143. 最长公共子序列(c#)

题解&#xff1a;力扣 public class Solution{public int LongestCommonSubsequence(string text1, string text2){int num1 text1.Length;int num2 text2.Length;int[,] dp new int[num1 1, num2 1];for(int i 0; i < num1; i){for(int j 0; j < num2; j){if(t…

telnet到设备里 php_PHP自动生成设备周检修计划

背景维修人员根据设备年度检修计划&#xff0c;然后制订周检修计划(设备年度计划包含设备一年需要维护几次等信息&#xff0c;根据年度计划分解到某一个周去执行)。在这个过程中&#xff0c;大量的excel复制粘贴工作&#xff0c;浪费人力并且容易出错。并且在审核过程中&#x…

通俗讲解:图像傅里叶变换

转自某乎&#xff1a;通俗讲解&#xff1a;图像傅里叶变换 - 知乎 这里我们主要要讲的是二维图像傅里叶变换&#xff0c;但是我们首先来看一张很厉害的一维傅里叶变换动图。 妈耶~厉害哇&#xff01;它把时域和频域解释的很清楚&#xff01; 什么&#xff01;你看不懂&#x…

数据库断线重连_干货分享—Niushop数据库配置

前几期阿牛ger主讲了代码编码规范&#xff0c;整洁规范的代码有利于我们查询和再次开发&#xff0c;也方便我们检测与修复bug&#xff01;这期&#xff0c;阿牛ger主要与大家分享数据库编码配置&#xff1a;数据库配置Niushop数据库配置方式与thinkphp相同&#xff0c;文件路径…

怎么将matlab滤波器系数导出_matlab与FPGA数字信号处理系列(1)——通过matlab工具箱设计FIR数字滤波器...

以99阶FIR低通滤波器为例&#xff0c;学习使用matlab的fdatool工具箱设计滤波器&#xff0c;并将滤波器系数导出到.coe文件&#xff0c;联合Vivado进行FPGA的FIR滤波器设计。本文滤波器参数为&#xff1a;低通FIR滤波器&#xff0c;窗函数设计&#xff0c;采用布莱克曼窗&#…

UGUI 合批原理

转自&#xff1a; UGUI合批原理笔记 - 赵青青 - 博客园 UGUI合批规则图解_时光不染-CSDN博客_ugui合批规则 合批的过程# 网格更新机制# Cavans.SendWillRenderCanvas m_LayoutRebuildQueuem_GraphicRebuildQueueCanvas.BuildBatch 更新所有DrawCall WaitingForJob 子线程网格…

vb.net 设置打印纸张与页边距_装订文档时不想让文字被挡住?在Excel中你可以这样设置打印!...

平时我们在打印文档的时候&#xff0c;通常会把文档左侧的页边距设置的大一点&#xff0c;这样在装订的时候显得美观一点。但如果我们进行双面打印时&#xff0c;文档左右两边的页边距刚好相反&#xff0c;装订时第2页的文本很容易被挡住&#xff0c;这样子反而更难装订了。那么…

CPU Cache原理与示例

转自这篇 CPU Cache&#xff0c;估计也没人看 基础知识 首先&#xff0c;我们都知道现在的 CPU 多核技术&#xff0c;都会有几级缓存&#xff0c;老的 CPU 会有两级内存&#xff08;L1 和 L2&#xff09;&#xff0c;新的CPU会有三级内存&#xff08;L1&#xff0c;L2&#x…

python集合的基本操作不包括_Python基础知识储备,List集合基本操作大盘点

List列表是Python中最基本的数据结构&#xff0c;也是Python中使用频率最高的数据类型&#xff0c;List列表中的元素不需要具有相同类型&#xff0c;使用起来非常方便。现在就来体验一下List列表的基本操作。 list集合基本操作 List的基本操作&#xff08;&#xff0c;copy&…

mysql blob hex_数据库的完整备份与恢复 quot;--hex-blobquot; - - ITeye博客

闲言少絮&#xff0c;这个程序利用MySql数据库自带小程序进行数据库的备份和还原。这两个程序分别是&#xff1a;mysql.exe和mysqldump.exe。这两个程序在您安装Mysql数据库的时候会自动安装到数据库的bin目录。这两个程序存在的目录为&#xff1a;C:\Program File\MySQL\MySQL…

android中怎么保存checkbox中的checked属性_Vue 精粹:v-model指令在组件中怎么玩

最近在写组件的时候&#xff0c;遇到了 v-model 的使用问题&#xff0c;在 Vue 官方文档中&#xff0c;有两小端内容是关于 v-model 指令在组件中的使用,查阅文档后&#xff0c;依然不得要领&#xff0c;最后几番折腾&#xff0c;理论结合实践&#xff0c;终于领悟其精髓&#…

linux location root访问文件夹404_如何使网站支持https访问?nginx配置https证书

购买SSL证书要想使用https访问你的网址&#xff0c;首先得拥有颁发的SSL证书。我使用的是免费版&#xff0c;有效期为一年&#xff0c;过期后再重新申请。申请SSL证书购买后&#xff0c;可在搜索框输入证书关键字进入到控制台。点击证书申请&#xff0c;按照提示填写完相关信息…

mysql rank函数_Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介

排名函数是Sql Server2005新增的功能&#xff0c;下面简单介绍一下他们各自的用法和区别。我们新建一张Order表并添加一些初始数据方便我们查看效果。表结构和初始数据Sql附上表结构和初始数据图&#xff1a;一、ROW_NUMBERrow_number的用途的非常广泛&#xff0c;排序最好用他…

git2.29.2.2怎么安装_MySQL5.5怎么安装

安装MySQL5.5的步骤&#xff1a;1、 官网下载mysql5.5下载地址&#xff1a;http://dev.mysql.com/downloads/mysql/5.5.html#downloads2、 安装mysql5.5注意&#xff0c;安装之前&#xff0c;请关闭杀毒软件。1)、 打开下载的mysql-5.5.53-winx64.msi2) 、点击下一步3)、 选中复…

未声明spire。它可能因保护级别而不可访问_信息系统安全:访问控制技术概述...

1.访问控制基本概念身份认证技术解决了识别“用户是谁”的问题&#xff0c;那么认证通过的用户是不是可以无条件地使用所有资源呢&#xff1f;答案是否定的。访问控制(Access Control)技术就是用来管理用户对系统资源的访问。访问控制是国际标准ISO7498-2中的五项安全服务之一&…

c++反汇编与逆向分析技术揭秘_C++反汇编与逆向分析技术揭秘

一、单类继承在父类中声明为私有的成员&#xff0c;子类对象无法直接访问&#xff0c;但是在子类对象的内存结构中&#xff0c;父类私有的成员数据依然存在。C语法规定的访问限制仅限于编译层面&#xff0c;在编译过程中进行语法检查&#xff0c;因此访问控制不会影响对象的内存…