《2023中国云原生成熟度模型报告》清晰展现中国云原生技术发展成熟度现状! 了解详情
写点什么

闲鱼前端基于 serverless 的一种多端开发解决方案

  • 2019-11-17
  • 本文字数:1847 字

    阅读完需:约 6 分钟

闲鱼前端基于serverless的一种多端开发解决方案

背景

前端的发展太快了,前端框架和技术的发展也层出不穷,还包括不同智能设备的出现,对前端开发同学来说是个很大的跳转,简单列举下:


  • 前端框架:vue、react、angular

  • 小程序:微信小程序、支付宝小程序、字节跳动小程序

  • 智能设备:苹果设备、天猫精灵、小度


这样就滋生了一些问题,比如我要开发一个通用的页面,兼容不同的端侧和小程序,显然目前是做不到的,我们只能开发多套页面去适配不同的场景,这样的话成本就太高了。


很多同学都在尝试解决这个问题,也催生了类似 taro 这样的多端统一开发框架,这是一个好的解决方案,但是比较被动,缺乏一定的扩展性。


这篇文章我们要探讨的是,看能不能换个角度去解决这个问题,提升开发效率。

ViewModel

当我们在开发一个页面的时候,不管用的是哪一种框架,通常都会抽象出一层 viewmodel 层,它主要有 2 个作用


  • 和服务端进行交互,接受后台返回的数据,进行加工并传递给 view 层渲染

  • 接受 view 层的回调,加工数据并返回给 view 层渲染



从上图中我们可以看出,viewmodel 是一段独立的通用代码逻辑,起到了承前启后的作用。它和 view 层关系更加紧密,因此通常会放在前端测。


既然 viewmodel 是独立的,那我们能不能把它放在后端呢?这样一个最大的好处就是 viewmodel 可以进行复用,不需要在重复编写,而且只需要改动一个 viewmodel,就可以全量生效。



似乎是一个很美好的想法,但是这部分代码由谁去开发呢,总不可能寄希望于后端同学吧,当然只能是我们自己,也感谢于 serverless 架构的出现,让这件事情变成了可能。


有些同学可能会问,既然 viewmodel 后移了,那 view 呢?后续会考虑结合我们的ui2code技术,那真的就比较完美了。

什么是 serverless

我们先简单介绍一下什么是 serverless,serverless 的基础是云技术,它是云技术发展到一定阶段而出现的一种革命性的高端架构。serverless 并不是说不需要服务器,而是指不需要开发者去关心底层服务器的状态、资源和扩容等,开发者只需要关注于业务逻辑实现。


架构上,我们可以把 serverless 分为 FaaS 和 BaaS。



FaaS 是用于创建、运行、管理函数服务的计算平台,它支持多种开发语言,比如 java、nodejs、dart 等,这有利于不同端侧的开发同学介入开发。FaaS 是基于事件驱动的思想,只有当一个函数被事件触发时才会占用服务器资源执行,不然都是无需占用服务器资源的。


BaaS 提供了用于函数调用的第三方基础服务,比如身份校验、日志、数据库等,它是由服务商直接提供,开发者无需关系实现,直接调用即可。

业务落地

我们是通过gaia平台开发后端接口,gaia 可以理解为上文提到的 FaaS 平台。


日常开发中有这样一个需求,下面是这个需求的一个页面。



因为这个页面上的数据比较多,先把它切分成一个个小的模块,后台返回数据的时候也根据模块来返回数据。


我们是根据 viewmodel 来设计接口,首先肯定有一个首屏数据接口;然后是页面上的交互,比如切换卡片、切换芝麻信用按钮,切换会引起页面数据变化,我们可以统一封装一个页面更新的接口;最后是一个开通的接口。


后端接口


前后端交互最重要的数据结构的设计,我们省略了中间的业务逻辑处理,看下接口的数据结构。



首屏接口返回的数据主要有几个特征:


  • 根据前端的页面模块定义返回结构

  • 字段的颗粒度很细,页面上的每个元素都对应一个字段值

  • 有两个字段来控制模块的显示和刷新


更新接口的返回数据结构和首屏接口类似,但是入参有所不同,主要包括 2 个字段:


  • data:当前页面的数据,为了避免数据的重复获取

  • action: 定义的页面操作


前端处理


从后端返回的数据可以看到,数据是及其详细的,无需我们做任何的业务逻辑处理,直接映射到页面即可。这样,前端已经变成了很薄的一层数据,没有任务的业务逻辑处理,变的很简单,当需要迁移到其他端时,只需要迁移视图层即可。当有任何的业务变动时,只需要修改后端的接口,就能生效。

收益与总结

通过具体的实践,我们发现,对于前端开发同学来说,变的简单了,开发效率有很大的提升,前端同学甚至都不需要去理解具体的业务逻辑,就能完成页面的开发。而且,提取的 viewmodel 可以复用到不同的端侧,设置还包括 native 端。我们还可以将 viewmodel 拆分成更小粒度的 viewmodel,方便在不同的页面接口中进行复用。我们有同学还在 FaaS 侧基于 redux 的思想封装了一个通用的状态管理框架,规范了前后端的交互。


后面, 还有一些问题待我们去解决,比如开发成本、viewmodel 的逻辑拆分、具体接口问题定位等。


本文转载自公众号闲鱼技术(ID:XYtech_Alibaba)。


原文链接


https://mp.weixin.qq.com/s/VLsVTe4ZyOJ9rNyVf5aXyg


2019-11-17 08:003339

评论

发布
暂无评论
发现更多内容

挑战30天学完Python:Day5 数据类型 - 列表list

MegaQi

Python 挑战30天学完Python 10月月更

微信朋友圈的高性能复杂度分析

Louis

跟着卷卷龙一起学Camera--延迟02

卷卷龙

ISP camera 10月月更

CorelDRAW 2019 软件应用项目(三)

张立梵

设计师 CorelDRAW 2022 10月月更

80%的前端开发都答不上来的js异步面试题

loveX001

JavaScript

React-hooks面试考察知识点汇总

beifeng1996

React

一天梳理React面试高频知识点

beifeng1996

React

Qt|QListWidget实现自定义Item效果

中国好公民st

c++ qt 10月月更

渲染农场是什么_云渲染农场优缺点有哪些?

Renderbus瑞云渲染农场

云渲染 云渲染农场 渲染农场 Renderbus瑞云渲染

React-Hooks怎样封装防抖和节流-面试真题

beifeng1996

React

Vue是怎样监听数组的变化的?

bb_xiaxia1998

Vue

架构实战训练营模块 2 作业

atcgnu

跟着卷卷龙一起学Camera--延迟01

卷卷龙

ISP camera 10月月更

面试官:深度不够,建议回去深挖

小傅哥

Java 程序员 面试 小傅哥 招聘

Docker Swarm从部署到基本操作

程序员欣宸

Docker Docker Swarm 10月月更

华为云从入门到实战 | 云关系数据库备份、恢复及存储容灾服务

TiAmo

华为 华为云 云开发 10月月更

跟着卷卷龙一起学Camera--延迟03

卷卷龙

ISP camera 10月月更

TLS加密远程连接Docker

程序员欣宸

Docker 容器安全 10月月更

Java编程之方法重写

魏铁锤

后端 java 编程 10月月更

Java核心之多态

魏铁锤

java 编程 10月月更

模块二作业:微信朋友圈复杂度分析

愚人夜行者

腾讯前端高频面试题合集

loveX001

JavaScript

架构实战训练营模块 2 作业

Geek_b35d92

22道js输出顺序问题,你能做出几道

loveX001

JavaScript

美团前端vue面试题(边面边更)

bb_xiaxia1998

Vue

深入理解 Go 语言的一等函数及其应用

宇宙之一粟

函数 Go 语言 10月月更 匿名函数

微信朋友圈的高性能复杂度分析

乖乖IvyShine

java之字节型文件流笔记

魏铁锤

java 编程 10月月更

大数据ELK(二十八):制作Dashboard

Lansonli

10月月更

$nextTick的原理是什么-vue面试进阶

bb_xiaxia1998

Vue

架构实战训练营模块 2 作业

Geek_b35d92

  • 扫码添加小助手
    领取最新资料包
闲鱼前端基于serverless的一种多端开发解决方案_架构_还休_InfoQ精选文章