• 【小程序】前端架构浅谈


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

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

    目录

    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使用 、 节点操作 、 页面跳转 、 缓存

      前端架构浅谈

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

  • 相关阅读:
    bzoj 3670: [Noi2014]动物园
    bzoj 2878: [Noi2012]迷失游乐园
    51nod 1348 乘积之和
    51nod 1514 美妙的序列
    AtCoder Grand Contest 002 D
    bzoj 3451 Normal
    LOJ #6119. 「2017 山东二轮集训 Day7」国王
    51nod 1752 哈希统计
    计蒜客 百度地图的实时路况
    Codeforces 549F Yura and Developers
  • 原文地址:https://www.cnblogs.com/lilicat/p/10956728.html
Copyright © 2020-2023  润新知