前端 重构时需要注意的事项_前端数据层落地实践
源宝导读:天际移动平台经过重构改版,近期正式发布了1.0版本,我们在低代码开发方面做了进一步增强。本文主要围绕前端Model、前端业务逻辑(领域模型)、数据层与视图层解耦(包装器模式)3个方面,给大家分享一下统一数据层方案的设计思路和实现。
一、背景
天际移动平台经过重构改版,近期正式发布了1.0版。在低代码开发方面进一步增强,内置了移动应用常用的系统组件,并提炼了表单和列表两大核心数据容器组件,使用了统一数据层解决方案。
以移动应用常见的表单详情页面为例,在移动平台完成搭建到最终渲染,基本流程如下:
在平台注册获取表单详情数据的业务API,根据返回数据格式创建业务对象,业务对象包含业务字段。
拖拽表单容器到页面中,绑定数据源到注册的业务API。
拖拽表单组件,如文本框组件,绑定字段为当前业务API返回业务对象的字段。
页面渲染流程:
根据业务API返回的业务对象格式初始化前端Model。
表单容器调用领域服务获取业务数据、填充Model、透传表单组件。
表单组件根据绑定的业务字段动态解析Model数据进行渲染。
本文主要围绕前端Model、前端业务逻辑(领域模型)、数据层与视图层解耦(包装器模式)3个方面,分享下统一数据层方案的设计思路和实现。
二、 前端Model
相较于后端Model,前端Model更像是一个容器,用于存放后端接口返回的数据,是前端数据层的最上游,也是接下来一切数据流动的起点。除了存储接口返回的数据,一般前端维护一套Model还需要进行容错处理,即运行时类型校验,这对提高系统的健壮性有很大的帮助。
2.1、技术选型
我们选用了mobx-state-tree(MST)实现数据层的Model,它是一种状态容器。MST的中心是活跃树的概念。每个树都具有形状(类型信息)和状态(数据)。从这棵活树上,会自动生成不可变的,结构共享的快照。
类型的设计使得它在设计时和运行时都可以用来验证类型正确性(设计时类型检查仅在TypeScript中起作用)。
运行时类型错误:
设计时类型错误:
2.2、实现细节
根据数据容器组件绑定的业务API接口返回的业务对象元数据,动态生成该数据容器的前端model,并存储到数据Store。
业务对象元数据示例:
动态生成前端model示例:
三、前端业务逻辑(领域模型)
在我们之前的《领域驱动设计DDD在前端应用的探索》分享中,详细说明了如何利用DDD分层架构,来实现前端业务逻辑解耦的理论性探索,简单回顾下。
3.1、前端业务逻辑解耦-DDD设计思路
3.2、实现细节
领域实体:
领域服务:
四、数据层与视图层解耦(包装器模式)
统一了数据层以后,组件只用来渲染数据,内部不用做数据相关的处理,更加轻量化。而数据层与组件渲染(视图层)是通过包装器模式进行解耦的。
在主流前端框架(React或Vue)中的高阶组件HOC,就是采用这种设计模式,移动平台是基于Vue技术栈开发的。
4.1、我们封装了一个渲染被包装组件的方法 renderWrappedComponent
4.2、创建数据容器包装器dataContainerWrapper
created阶段初始化数据Model存储在数据Store。
mounted阶段请求业务数据并填充到前端Model。
render阶段将前端Model数据传递给实际的组件进行渲染。
包装器与数据层数据是通过MobX进行关联的,通过observer观察数据变化,响应式更新包装器。
4.3、在组件渲染时通过数据容器Connect,将组件与包装器连接起来
五、总结
当前主流的前端框架在数据层上是缺失的,本次实践结合前端Model、前端领域模型、数据层与视图层解耦等方面,形成了一个可落地的解决方案,这也是一个趋势,感兴趣的可以深入了解下。
------ END ------
作者简介
陈同学: 开发SM,目前负责天际移动平台的相关研发工作。
也许您还想看
移动建模平台元数据存储架构演进
AI云店小程序演变之路
基于 Go 的微服务运行情况监控实践
在明源云客,一个全新的服务会经历什么?
云客后台优化的“前世今生”(一)
前端 重构时需要注意的事项_前端数据层落地实践相关推荐
- 前端 重构时需要注意的事项_驾驶式扫地车的功能特点和使用时需要注意事项...
扫地车 随着经济的发展,人们的生活水平不断提高,对生活环境的要求也越来越高,于是许多工厂.物业.超市.社区.市政单位等开始购买扫地车来进行路面清洁.一是清洗效果好,二是效率高,可以节省人工成本.扫地车 ...
- 多个前端项目放在一个git好还是_前端工作流
没有规矩不成方圆,如果一个项目只有你一个人在维护,那么你不需要担心很多问题,因为你对它心知肚明,但同时一个人的力量无法支撑起来大型项目.更多时候,我们需要与其他人合作,共同把项目推进,这意味着我们需要 ...
- layui前端页面table表格怎么格式化转换时间_前端开发面经知识点总结
HTTP,HTML,浏览器 1.说一下http和https 2.tcp三次握手,一句话概括 3.TCP和UDP的区别 4.WebSocket的实现和应用 6. 一个图片url访问后直接下载怎样实现? ...
- 前端实现照片选取范围上传_前端代码是怎样智能生成的?看看大佬怎么说
作者|莱斯 出品|阿里巴巴新零售淘系技术部 导读: 作为阿里经济体前端委员会四大技术方向之一,前端智能化项目经历了 2019 双十一的阶段性考验,交出了不错的答卷,天猫淘宝双十一会场新增模块 79.3 ...
- lisp 线性标注自动避让_自动化数据增强:实践、理论和新方向
选自Stanford AI Lab Blog 作者:Sharon Y. Li 机器之心编译 参与:Panda 对当今需要大量数据的机器学习模型而言,数据增强是一种具有显著价值的技术--既可用于缓解数据 ...
- mysql 多租户设计_[转载]数据层的多租户浅谈(SAAS多租户数据库设计)
原文:http://www.ibm.com/developerworks/cn/java/j-lo-dataMultitenant/index.html 在上一篇"浅析多租户在 Java 平 ...
- 前端面试技巧和注意事项_前端面试百分之九十九过的技巧
2020最全的前端面试指南,一个多月 1.8w 字的面试经验积累,凭借它最终成功入职大厂-- 今年的金三银四刚好赶上疫情,很多大公司都停止招聘甚至裁员,想跳槽的小伙伴被打的措手不及. 需求减少要求肯定 ...
- 前端面试技巧和注意事项_前端HR的面试套路,你懂几个?
原标题:前端HR的面试套路,你懂几个? 面试前端工程师对我来说是一件非常有意思的事,因为面试过程很大程度上也是自我提升的过程.经过这几年在行业里的摸索,我总结出了自己的一套很有效的面试前端工程师的方法 ...
- 前端中全部盒子靠左对齐_前端面试一百问之弹性盒子中 flex: 0 1 auto 表示什么意思...
flex Box 布局(Flexible Box)旨在提供一种更有效的方式来布局.对齐和分配容器中项目之间的空间,即使它们的大小是未知的或动态改变的.其主要思想是让容器能根据可用空间的大小来动态地改变 ...
最新文章
- linux c++ 函数 查看,在C++ man pages中查询C++的函数
- 75.事务是什么?特征?
- python讲解from ctypes import *调用C语言动态链接库
- iOS新版微信底部返回横条问题
- CSU-1975 机器人搬重物(BFS)
- python读取日志错误信息_使用Python将Exception异常错误堆栈信息写入日志文件
- 信息安全完全参考手册之安全设计原则(第四章)
- 【Java从0到架构师】SpringCloud - Hystrix、Zuul
- CentOS hadoop 分布式集群的搭建
- selenium定位php,selenium之元素定位
- mysql insert ignore into 与replace 避免重复插入
- 3ds max制作宋惠乔的教程----作者: 火星时代 来源: 火星时代
- 地理信息系统(汤国安)重点整理与推导(第二章)
- 树莓派裸板linux,树莓派裸机开发步骤
- 2022年海外有哪些直播带货平台?直播带货要怎么做?
- Python基础(二) 基本数据类型①:整数型、布尔型、字符串
- 申宝公司-探底回升再续升势
- 使用RRDTOOL进行绘图
- Flink——实时计算引擎
- 【惊】Spring源码的秘密|一起看看Spring启动时究竟做了什么惊天动地的事情?
热门文章
- android webview定位权限,混合开发安Android webview使用内置浏览器定位的权限
- K-th Beautiful String CodeForces - 1328B(二分+数学)
- Windows10安装ubuntu18.04双系统教程
- HFSS中的求解类型(Solution Type)
- linux系统网络编程简介,Linux网络编程入门
- 【算法竞赛学习】数字中国创新大赛智慧海洋建设-Task1地理数据分析常用工具
- win10共享打印机怎么设置_怎么设置打印机共享?
- 数学--数论--积性函数(初步)
- HDU-1857 畅通工程再续
- EasyUI 扩展自定义EasyUI校验规则 验证规则(常用的)