闲鱼前端基于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来设计接口,首先肯定有一个首屏数据接口;然后是页面上的交互,比如切换卡片、切换芝麻信用按钮,切换会引起页面数据变化,我们可以统一封装一个页面更新的接口;最后是一个开通的接口。

后端接口

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

1、首屏接口

返回的数据主要有几个特征

  • 根据前端的页面模块定义返回结构
  • 字段的颗粒度很细,页面上的每个元素都对应一个字段值
  • 有两个字段来控制模块的显示和刷新

2、更新接口

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

  • data:当前页面的数据,为了避免数据的重复获取
  • action: 定义的页面操作

前端处理

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

结论

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

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


阿里云双11亿元补贴提前领,进入抽取iPhone 11 Pro:https://www.aliyun.com/1111/2019/home?utm_content=g_1000083110

原文链接
本文为云栖社区原创内容,未经允许不得转载。

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

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

相关文章

Seata 的AT模式需求实战_04

接上一篇:Seata 与 Nacos Config配置中心整合_03 模拟下单场景:首先去在自己的本地创建一条下单记录,同时,还要去调用库存服务,执行减库存操作。 文章目录一、数据库部分1. 订单库创建2. 表结构初始化3. 库存数据库创建…

国产数据库技术全面破冰,金融核心系统打破国外巨头垄断指日可待

作者 | 马超责编 | 伍杏玲头图 | CSDN下载自东方IC出品 | CSDN(ID:CSDNnews) 作为一名金融IT人,打造完全自主掌控的金融核心,是我们心中的梦想。年轻的读者可能不太了解过去金融系统的建设往事,我们一直沿用至2013年的…

Go语言出现后,Java还是最佳选择吗?

阿里妹导读:随着大量新生的异步框架和支持协程的语言(如Go)的出现,在很多场景下操作系统的线程调度成为了性能的瓶颈,Java也因此被质疑是否不再适应最新的云场景了。4年前,阿里JVM团队开始自研Wisp2,将Go语言的协程能力…

为何小程序上线了,他们的内心却留下遗憾?

前言 出于多端投放和开放生态的考虑,闲鱼开始接入整个阿里小程序体系。闲鱼在9月份迅速上线了第一个小程序鱼塘小程序,由于刚接触不熟悉小程序体系,整体性能上有比较大的优化空间,主要表现在以下问题: 小程序加载慢&…

高德亿级流量接入层服务的演化之路

2019杭州云栖大会上,高德地图技术团队向与会者分享了包括视觉与机器智能、路线规划、场景化/精细化定位时空数据应用、亿级流量架构演进等多个出行技术领域的热门话题。现场火爆,听众反响强烈。我们把其中的优秀演讲内容整理成文并陆续发布出来&#xff…

一篇与众不同的 String、StringBuilder 和 StringBuffer 详解

来源 | 程序员 cxuan责编 | Carol封图 | CSDN 付费下载自视觉中国这是一道老生常谈的问题了,字符串是不仅是 Java 中非常重要的一个对象,它在其他语言中也存在。比如 C、Visual Basic、C# 等。字符串使用 String 来表示,字符串一旦被创建出来…

Ververica Platform-阿里巴巴全新Flink企业版揭秘

摘要:2019云栖大会大数据 & AI专场,阿里巴巴资深技术专家王峰带来“Ververica Platform-阿里巴巴全新Flink企业版揭秘”的演讲。本文主要从Ververica由来开始谈起,着重讲了Ververica Platform的四个核心插件App Manager、Libra Service、…

滴滴经验分享:SQLFlow如何让运营专家用上AI?

蚂蚁金服过去十五年,重塑支付改变生活,为全球超过十二亿人提供服务,这些背后离不开技术的支撑。在2019杭州云栖大会上,蚂蚁金服将十五年来的技术沉淀,以及面向未来的金融技术创新和参会者分享。我们将其中的优秀演讲整…

秒杀场景_Sentinel在秒杀场景的应用_05

上一篇解决了在高并发秒杀场景下的超卖问题,这一篇主要解决如何利用Sentinel防止服务器雪崩。 文章目录一、 商品微服务集成Sentinel1. 引入依赖2. 添加配置二、 秒杀微服务集成Sentinel2.1. 引入依赖2.2. 添加配置三、 Sentinel流控规则3.1. 登录Sentinel3.2. 请求…

SQLServer 密码验证登录18456错误解决方案

一、SQLServer18456错误 二、解决方案 第一步:确定这两个服务都是开启状态 (1)点击管理 (2)点击服务和应用程序 (3)确定这两个都是开启状态 (4)开启方法,右…

80% 的 Java 焦虑,都可以被这张图解决

昨晚,我在路口等车的时候,听到几个人在那讨论问题:“之前我用 jprofiler 监控 jvm 里的对象,当老年代满了,我手动触发一次 fgc,发现只能回收一半,再触发一次,就完全回收,…

直击案发现场!TCP 10倍延迟的真相是?

阿里妹导读:什么是经验?就是遇到问题,解决问题,总结方法。遇到的问题多了,解决的办法多了,经验自然就积累出来了。今天的文章是阿里技术专家蛰剑在工作中遇到的一个问题引发的对TCP性能和发送接收Buffer关系…

今日头条在消息服务平台和容灾体系建设方面的实践与思考

本篇文章整理自今日头条的沈辉在 RocketMQ 开发者沙龙中的演讲,主要和大家分享一下,RocketMQ 在微服务架构下的实践和容灾体系建设。沈辉是今日头条的架构师,主要负责 RocketMQ 在头条的落地以及架构设计,参与消息系统的时间大概一…

秒杀场景_同步秒杀分析和实战_01

文章目录一、应用部署准备1. mysql安装部署2. redis安装部署3. nacos安装部署二、数据库准备2.1. 创建数据库2.2. 初始化表结构2.3. 搭建微服务父工程三、商品模块微服务3.1. 搭建product-serv模块3.2. 配置yml3.3. 实体3.4. 接口3.5. service3.6. controller3.7. 启动类四、秒…

Kali 2020版 Linux操作系统解决系统语言问题(英文--中文)

文章目录一、更新镜像源(1)进入配置文件(2)更新软件包二、修改配置(1)打开终端输入以下数据(2)修改配置文件三、安装中文字体四、restart(重启Kali Linux系统)一、更新镜像源 镜像源有很多,我这里提供了阿里云的镜像源…

Spark Relational Cache实现亚秒级响应的交互式分析

本次分享主要分为以下四个方面: 项目介绍技术分析如何使用性能分析 一、项目介绍 项目背景 阿里云EMR是一个开源大数据解决方案,目前EMR上面已经集成了很多开源组件,并且组件数量也在不断的增加中。EMR下层可以访问各种各样的存储&#xf…

阿里巴巴 Kubernetes 应用管理实践中的经验与教训

导读:云原生时代,Kubernetes 的重要性日益凸显。然而,大多数互联网公司在 Kubernetes 上的探索并非想象中顺利,Kubernetes 自带的复杂性足以让一批开发者望而却步。本文中,阿里巴巴技术专家孙健波在接受采访时基于阿里…

那些被大数据时代抛弃的人

作者 | 衣公子来源 | 衣公子的剑(ID:yigongzidejian)前言2000年,微软如日中天。有人问比尔盖茨(Bill Gates)对于IT行业的看法。盖茨说,挺好的,就是有点noise。 noise,本意…

秒杀场景_多线程异步抢单队列分析与实现_02

文章目录1. 实体2. Service改造3. 启动类1. 实体 package com.gblfy.entity;import java.io.Serializable;/*** 用户排队抢单信息实体*/Data public class SkillEntity implements Serializable {private Long productId;private String userId; }2. Service改造 SkillGoodSe…

AI赋能DevOps:数据驱动的全栈工程师实践

DevOps是什么? 对于传统的软件研发而言,开发,测试,运维,运营,有不同的岗位进行分工协作,以保证质量和专业度,同一件事情,依赖不同岗位的排期、沟通、协调,效率…