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

一、背景

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

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

  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的中心是活跃树的概念。每个树都具有形状(类型信息)和状态(数据)。从这棵活树上,会自动生成不可变的,结构共享的快照。

类型的设计使得它在设计时和运行时都可以用来验证类型正确性(设计时类型检查仅在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 的微服务运行情况监控实践

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

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

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

  1. 前端 重构时需要注意的事项_驾驶式扫地车的功能特点和使用时需要注意事项...

    扫地车 随着经济的发展,人们的生活水平不断提高,对生活环境的要求也越来越高,于是许多工厂.物业.超市.社区.市政单位等开始购买扫地车来进行路面清洁.一是清洗效果好,二是效率高,可以节省人工成本.扫地车 ...

  2. 多个前端项目放在一个git好还是_前端工作流

    没有规矩不成方圆,如果一个项目只有你一个人在维护,那么你不需要担心很多问题,因为你对它心知肚明,但同时一个人的力量无法支撑起来大型项目.更多时候,我们需要与其他人合作,共同把项目推进,这意味着我们需要 ...

  3. layui前端页面table表格怎么格式化转换时间_前端开发面经知识点总结

    HTTP,HTML,浏览器 1.说一下http和https 2.tcp三次握手,一句话概括 3.TCP和UDP的区别 4.WebSocket的实现和应用 6. 一个图片url访问后直接下载怎样实现? ...

  4. 前端实现照片选取范围上传_前端代码是怎样智能生成的?看看大佬怎么说

    作者|莱斯 出品|阿里巴巴新零售淘系技术部 导读: 作为阿里经济体前端委员会四大技术方向之一,前端智能化项目经历了 2019 双十一的阶段性考验,交出了不错的答卷,天猫淘宝双十一会场新增模块 79.3 ...

  5. lisp 线性标注自动避让_自动化数据增强:实践、理论和新方向

    选自Stanford AI Lab Blog 作者:Sharon Y. Li 机器之心编译 参与:Panda 对当今需要大量数据的机器学习模型而言,数据增强是一种具有显著价值的技术--既可用于缓解数据 ...

  6. mysql 多租户设计_[转载]数据层的多租户浅谈(SAAS多租户数据库设计)

    原文:http://www.ibm.com/developerworks/cn/java/j-lo-dataMultitenant/index.html 在上一篇"浅析多租户在 Java 平 ...

  7. 前端面试技巧和注意事项_前端面试百分之九十九过的技巧

    2020最全的前端面试指南,一个多月 1.8w 字的面试经验积累,凭借它最终成功入职大厂-- 今年的金三银四刚好赶上疫情,很多大公司都停止招聘甚至裁员,想跳槽的小伙伴被打的措手不及. 需求减少要求肯定 ...

  8. 前端面试技巧和注意事项_前端HR的面试套路,你懂几个?

    原标题:前端HR的面试套路,你懂几个? 面试前端工程师对我来说是一件非常有意思的事,因为面试过程很大程度上也是自我提升的过程.经过这几年在行业里的摸索,我总结出了自己的一套很有效的面试前端工程师的方法 ...

  9. 前端中全部盒子靠左对齐_前端面试一百问之弹性盒子中 flex: 0 1 auto 表示什么意思...

    flex Box 布局(Flexible Box)旨在提供一种更有效的方式来布局.对齐和分配容器中项目之间的空间,即使它们的大小是未知的或动态改变的.其主要思想是让容器能根据可用空间的大小来动态地改变 ...

最新文章

  1. linux c++ 函数 查看,在C++ man pages中查询C++的函数
  2. 75.事务是什么?特征?
  3. python讲解from ctypes import *调用C语言动态链接库
  4. iOS新版微信底部返回横条问题
  5. CSU-1975 机器人搬重物(BFS)
  6. python读取日志错误信息_使用Python将Exception异常错误堆栈信息写入日志文件
  7. 信息安全完全参考手册之安全设计原则(第四章)
  8. 【Java从0到架构师】SpringCloud - Hystrix、Zuul
  9. CentOS hadoop 分布式集群的搭建
  10. selenium定位php,selenium之元素定位
  11. mysql insert ignore into 与replace 避免重复插入
  12. 3ds max制作宋惠乔的教程----作者: 火星时代 来源: 火星时代
  13. 地理信息系统(汤国安)重点整理与推导(第二章)
  14. 树莓派裸板linux,树莓派裸机开发步骤
  15. 2022年海外有哪些直播带货平台?直播带货要怎么做?
  16. Python基础(二) 基本数据类型①:整数型、布尔型、字符串
  17. 申宝公司-探底回升再续升势
  18. 使用RRDTOOL进行绘图
  19. Flink——实时计算引擎
  20. 【惊】Spring源码的秘密|一起看看Spring启动时究竟做了什么惊天动地的事情?

热门文章

  1. android webview定位权限,混合开发安Android webview使用内置浏览器定位的权限
  2. K-th Beautiful String CodeForces - 1328B(二分+数学)
  3. Windows10安装ubuntu18.04双系统教程
  4. HFSS中的求解类型(Solution Type)
  5. linux系统网络编程简介,Linux网络编程入门
  6. 【算法竞赛学习】数字中国创新大赛智慧海洋建设-Task1地理数据分析常用工具
  7. win10共享打印机怎么设置_怎么设置打印机共享?
  8. 数学--数论--积性函数(初步)
  9. HDU-1857 畅通工程再续
  10. EasyUI 扩展自定义EasyUI校验规则 验证规则(常用的)