open-store-sdk
v0.0.1
Published
开个店前端SDK
Downloads
3
Readme
为什么引入SDK概念
- 规范入参出参的数据格式,目前服务端提供的数据格式问题
- 规范前端基础业务逻辑
- 规范异常情况的处理(目前很多页面逻辑未处理异常场景的)
- 多端支持,目前我们的api模块仅支持项目本身,脱离项目无法复用,耦合性过高,跟页面强依赖
- 满足函数式编程
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() {
});
}