热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【小程序】前端架构浅谈

前些日子,在架构师带领下,我和另一个前端从零开始开发微信小程序。这是一个比较完整的项目开发,基于此项目,从以下几个点,我对小程序的架构进行一些分析和介绍。由于本人能力有限,可能会

前些日子,在架构师带领下,我和另一个前端从零开始开发微信小程序。这是一个比较完整的项目开发,基于此项目,从以下几个点,我对小程序的架构进行一些分析和介绍。

由于本人能力有限,可能会有缺漏和错误,欢迎指出。

目录

  1. 项目介绍
  2. 项目结构
  3. 组件化开发
  4. HTTP请求封装
  5. 文档书写
  6. 总结

内容

 

1. 项目介绍

此是一个轻量的小程序,全部由原生小程序页面组成。我们将之划分为7个模块,用户、地址、优惠券、团购商城、订单、红包、退款。

项目初始是只有产品原型,服务端开发、UI设计、前端开发是同步进行的。一开始,我们是按照原型进行架构和页面开发,UI设计图和服务端接口后面陆陆续续提供出来的时候,我们再进行修改,这边会有一个很重要的,就是mock数据,这个会在后面讲到。

 

2. 项目结构

项目结构主要分为公用组件、图片资源、页面、数据格式处理、工具类。

 ├─ components(公用组件)
 ├─ images(图片资源)
 ├─ libs(库)
 │   ├─ mock.js(mock数据)
 │   ├─ sdk.js(接口封装)
 ├─ pages(页面)
 │   ├─ account(用户相关)
 │   ├─ address(地址相关)
 │   ├─ coupon(优惠券相关)
 │   ├─ group(团购商城相关)
 │   ├─ order(订单相关)
 │   ├─ redPackage(红包相关)
 │   └─ refund(退款相关)
 ├─ service(数据格式处理)
 └─ utils(工具类)
     ├─ public.js
     └─ request.js


 3. 组件化开发

大家都知道,组件化开发有很多好处。

  • 组件复用,代码量少,提高编译速度。
  • 组件的逻辑独立,修改不会影响其它文件。
  • 文件结构清楚,方便其他人员的使用。

不过,如果组件设计不合理,业务拆分不对,也会造成重复代码、组件通信混乱和多工作量等问题。这个就需要项目开发者统筹全局,进行分析判断。 所以,我们研究了原型图,分析其中的功能模块和业务模块,我们将相同或可复用的模块提取出来,放到全局组件库下。同时,我们将单个模块也进行了组件化拆分,放在各自的模块组件库下。

在模块中,我们在页面中也抽了一些逻辑相对独立的代码出来,写成组件,有些是可以复用,有些单纯就是为了页面可读性高些。复用举例:在订单详情和订单列表中,有关订单的状态及功能按钮是一致的,我们就将这一块抽了出来,写成behaviors。可读性举例:确认订单页中,选择红包的弹窗,就单独写成组件,只要将红包选择的最终结果传给父组件就行,两者的边界很清晰。


 4. HTTP请求封装

微信小程序进行网络通信,要先设置域名,不然会提示不合法。设置域名的信息可以在开发者工具-详情-域名信息中看到。

使用wx.request可以发起一个http请求

wx.request({
  url: \'test.php\', // 开发者服务器接口地址
  data: { // 请求的参数
    x: \'\',
    y: \'\'
  },
  method: \'GET\', // HTTP 请求方法, 默认GET
  header: { // 设置请求的 header
    \'content-type\': \'application/json\', // 默认值
    \'COOKIE\': \'token=\' + token
  },
  dataType: \'json\', // 返回的数据格式, 默认json
  responseType: \'text\', // 响应的数据类型, 默认text
  success (res) { // 接口调用成功的回调函数
    console.log(res.data)
  },
  fail () {
    // 接口调用失败的回调函数
  },
  complete () {
    // 接口调用结束的回调函数(调用成功、失败都会执行)
  } 
})

在平时项目使用中,我们往往会对HTTP请求做一层封装。

从图中可以看到,在自定义的SDK中封装HTTPS请求的数据或MOCK的数据。在各个七个模块的services中分派,然后再在页面pages或者组件components中调用。

  1. request模块封装,方便网络请求。
  2. 定义了一个名为SDK的类,集成所有接口获取的方法。
  3. 在app.js中,通过new命令生成对象实例,将初始化后的sdk赋值globalData.API_SDK,方便项目中中调用。
  4. Services中获取globalData.API_SDK对象实例中的接口方法,并导出。
  5. 在页面中引用Services中的方法,并调用方法。

 

5. 文档书写

软件开发文档是软件开发使用和维护过程中的必备资料。它能提高软件开发的效率,保证软件的质量,而且在软件的使用过程中有指导,帮助,解惑的作用,尤其在维护工作中,文档是不可或缺的资料。

在项目中,我们维护了两份文档,分别为API文档和组件README文档。 在API文档中,将每次SDK修改的内容都写在文档中,标注版本、时间、说明。并说明SDK接口的使用方式、传参说明、API响应说明等。在README文档中,则写明目录结构说明和全局组件说明。这样,开发者就可以通过文档来比较方便的了解此项目的情况。

 

6. 总结

在写这个项目前,前端约定了小程序开发规范。明确了页面、命名、样式、行为等规范。因此,在开发过程中,我们格外注意开发的风格,做到统一。

在原型出来以后,我们根据原型图进行了模块和功能的划分,明确了每个人所做的开发内容,制定了前端开发排期。

在开发过程中,因为UI图还没出来,我们根据原型图先进行了开发,后来在修改样式的时候,感觉还是挺麻烦的。不过,虽然存在样式返工问题,但是加快了后续的开发速度。

因为我们封装了全部的接口到SDK中,对Java程序员返回的数据格式进行了一层处理,所以我们在开发对接的时候很方便,速度很多。同时,在调试对接的时候,UI图中对于细节的处理不同,也在同时修改一些缺乏的字段或者服务端没有提供或者一开始SDK没有包入,在API文档说明都有做修改内容说明,多人协作时,文档真的很重要。

这个项目前期很慢,后期很快。快到项目上线日期了,其实我们有些接口还没调完(测试已经在陆陆续续测试我们已经写好的模块了),不过有了前面的打底,速度进行的很快,如约上了。

这是我写的第二个小程序的项目,是完整的整一个项目。前一个小程序项目只写了一个小模块,因此感觉成长还是挺大的。比较其他以往的开发项目,类似vue、react、支付宝小程序,感觉开发框架都是大同小异的,基本理念和流程都大致相似,只是开发语言或方法的实现有所差异。

 

----------------------------------------

小程序系列:

  前言

  项目结构

  生命周期

  请求与封装

  数据绑定

  事件

  基础使用: component使用 、 wxs使用 、 节点操作 、 页面跳转 、 缓存

  前端架构浅谈

----------------------------------------

 


推荐阅读
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • uniapp开发H5解决跨域问题的两种代理方法
    本文介绍了uniapp开发H5解决跨域问题的两种代理方法,分别是在manifest.json文件和vue.config.js文件中设置代理。通过设置代理根域名和配置路径别名,可以实现H5页面的跨域访问。同时还介绍了如何开启内网穿透,让外网的人可以访问到本地调试的H5页面。 ... [详细]
author-avatar
Lovepetall
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有