1.0.19 • Published 3 months ago

@sandload/open-store-sdk v1.0.19

Weekly downloads
-
License
MIT
Repository
-
Last release
3 months ago

为什么引入SDK概念

  1. 规范入参出参的数据格式,目前服务端提供的数据格式问题
  2. 规范前端基础业务逻辑
  3. 规范异常情况的处理(目前很多页面逻辑未处理异常场景的)
  4. 多端支持,目前我们的api模块仅支持项目本身,脱离项目无法复用,耦合性过高,跟页面强依赖
  5. 满足函数式编程

SDK工程

  • 数据转换映射
此部分待完善,以及必要性评估
  • 业务基础数据类型定义,类似money、distance
针对sdk输出的数据类型做严格控制,该返回null,不返回类似''或{}等
  • fetch项目内需要可配置化
暂定fetch内置,仅提供必要异步回调
  • 接口的内聚
sevices为单一职责服务, logic为逻辑组合

servces为正常code
logic中的code会存在为自定义情况
  • SDK边界划分
SDK只处理数据,绝不处理与UI相关、页面业务相关的交互
  • 异常、数据的捕获上报

小程序工程

SDK功能

export default {
    config: {
        env: 0,
        host: '',
        constCode: [],
        accessToken: '',
        partnerId: '1864'
    },
    commonParams: {
        storeId: '',
        sessionId: ''
    },
    header: {},
    adapter: {
        beforeRequest(config){
            
        },
        afterRequest(response){
            return Promise.resolve();
        }
    },
    state: {},
    utils: {
        _: lodash
    },
    service: {
        store,
        product,
        config,
        member,
        address,
        cart,
        activity,
        ...
    },
    logic: {
        // 基于service的二次封装,固定的流程页面,提供方便快速搭建跑通流程
        home: {},
        pickup: {},
        take: {},
        mine: {},
        orderSubmit: {},
        userInfo: {}
    }
}

如何使用SDK

import sdk from 'fm-sdk';
import { beforeRequest, afterRequest } from './fetch.js';

export default {
    onLaunch() {
        let ext = getExt();
        // 初始化配置
        let fm = sdk.init({
            config: {
                appId: 'wxef754bdcc220db4e',
                partnerId: '2399',
                baseURL: 'https://open-store.sandload.cn',
            },
            adapter: {
                // 可将adapter部分抽离到独立的模块
                beforeRequest(config) {
                    
                },
                afterRequest(response, options) {
                    // 1.在这里做一系列额外处理,例如弹框提示,但是注意这里无法更
                    // 2.改后续进入service的值,sdk提供足够的拓展,
                    // 3.但提供拓展的目的旨在让控制交互的权利释放,不代表有能力干扰sdk,例如这里的afterRequest无法干扰sdk正常运行
                    // options提供
                    if (response.success) {
                        // 成功可以无视
                    } else {
                        uni.showToast();
                        uni.FM.reportLog();
                    }
                }
            }
        });
        uni.FM = fm;
    },
    onError(error){
        // sdk错误上报
        uni.FM.reportLog(1, {
            <!--需要上报的数据-->
            error,
            ...params
        });
    }
}

页面使用

export default class pickup {
    construct(){
        this.a = a;
        
        this.callback = function(){}
        
        this.init();
    }
    init(){
        let params = {};
        uni.FM.logic.member.getApiData(params).then(res=>{
            this.callback();
        });
    }
    hasStore(){
        
    }
    hasMenuAndCategary(){
        
    }
    
}

Page

调用1
onLoad(){
    let params = { orderType: 1 };
    uni.fm.service.cart.getData(params).then(res=>{
    
    }).catch(err=>{
    
    })
}

调用2

onLoad(){
    let params = { orderType: 1 };
    let instance = uni.fm.logic.pickup(params);
    instance.on('init', function() {
        
    });
}
1.0.19

3 months ago

1.0.18

3 months ago

1.0.17

3 months ago

1.0.16

5 months ago

1.0.15

5 months ago

1.0.14

8 months ago

1.0.13

9 months ago

1.0.12

10 months ago

1.0.11

10 months ago

1.0.10

10 months ago

1.0.9

10 months ago

1.0.8

10 months ago

1.0.7

10 months ago

1.0.6

10 months ago

1.0.5

10 months ago

1.0.4

10 months ago

1.0.3

10 months ago

1.0.2

10 months ago

1.0.1

10 months ago

1.0.0

10 months ago