写点什么

闲鱼前端基于 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:003122

评论

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

常见的杀毒软件有哪些?

InfoQ IT百科

活动报名 | 如何基于开源项目 Tapdata PDK,快速完成数据源和目标的开发?

tapdata

数据库

png、jpg这两种图片格式有什么不同?

InfoQ IT百科

自助洗车机加盟项目要怎么加盟

车白兔自助洗车机加盟

自助洗车加盟 自助洗车机项目

百万奖金,首届船海数据智能应用创新大赛正式开赛

科技热闻

怎么转换视频的格式?

InfoQ IT百科

TASKCTL 用户权限操作设置

TASKCTL

DevOps 分布式 敏捷开发 ETL系统 自动化运维

6. 堪比JMeter的.Net压测工具 - Crank 实战篇 - 收集诊断跟踪信息与如何分析瓶颈

MASA技术团队

C# .net 测试 压测 测试工具

怎么建立无法删除的文件夹?

InfoQ IT百科

2022中国“SaaS”领域十大趋势

小炮

SaaS SaaS应用 SaaS平台

限时好礼 | MongoDB又有新书籍出炉啦!

MongoDB中文社区

mongodb

24小时自助洗车加盟怎么收费?

车白兔自助洗车机加盟

自助洗车加盟 24小时自助洗车

post接口请求测试,通俗易懂!

Liam

测试 Postman swagger 测试工具 jmetere

24小时自助洗车设备厂家哪家好?

车白兔自助洗车机加盟

自助洗车机厂家 24小时自助洗车 自助洗车机设备

深挖房地产行业数智化转型升级价值,推动地产管理革新

数商云

产业互联网 数字化转型 企业数字化

java高级用法之:绑定CPU的线程Thread-Affinity

程序那些事

Java Netty 程序那些事 4月月更

自助洗车加盟!自助洗车品牌大全

车白兔自助洗车机加盟

自助洗车加盟 自助洗车品牌

截图快捷键是什么?

InfoQ IT百科

将node项目部署到云服务器详细教程

CRMEB

如何发起 MQTT 亿级连接和千万消息吞吐性能测试

阿里巴巴云原生

百万奖金,首届船海数据智能应用创新大赛正式开赛

科技热闻

浅析mysql性能优化

乌龟哥哥

4月月更

加盟自助洗车需要符合什么条件

车白兔自助洗车机加盟

加盟自助洗车 自助洗车加盟条件

淘宝小程序体验优化:数据分析和优化实践

阿里巴巴移动技术

小程序 数据分析 体验优化 性能模型

怎么添加或删除电脑上的应用软件呢?

InfoQ IT百科

TASKCTL 调度平台服务节点管理

TASKCTL

DevOps 分布式 自动化部署 Kafka ETL TASKCTL

【TcaplusDB知识库】如何插入用户标记

tcaplus

闲鱼前端基于serverless的一种多端开发解决方案_架构_还休_InfoQ精选文章