l1n6yun's Blog

记录学习的技能和遇到的问题

0%

小程序之模型实现

model层就不用多说了,主要是把数据处理部分独立出来,便于统一服务和维护,这里重点强调下model内部的实现细节,这里有一个实现技巧可以用在其它别的地方。下面直接上代码部分。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import cache from '../utils/cache.js'
import ajax from '../utils/ajax.js'

// 统一的接口地址,一般一个controller下面多个action是一致的
let url = "";

/**
* 格式化请求参数,根据不同的接口自行处理
* @params params 键值对对象,形如{}
* @return {*} 格式化后的参数
*/
let formatParams = function(params) {
return params;
}

/**
* 格式化返回结果,根据不同的接口自行处理
* @params data 对象 数组等任何合法的JS数据类型
* @return {*} 格式化后的数据
*/
let formatResult = function(data) {
return data;
}


module.exports = {

/**
* 读取可用游戏业务列表
* @params params 参数,本接口用不到
* @return {*} 返回 Promise 对象
*/
getList(params) {

// 如果接口地址不一致,这里重写
let url = "";

// 如果有特殊的参数处理逻辑,这里重写
let formatParams = function(params) {
return params;
}

// 如果有特殊的格式处理,这里重写
let formatResult = function(result) {
return result;
}

/**
* 如果需要自己先判断缓存或者别的处理,这里手动使用Promise封装一下即可
*/
return new Promise((resolve, reject) => {

var goods_list = cache.get("goods_list");

if (null == goods_list) {
resolve(goods_list)
} else {
ajax.get({
url: url,
data: formatParams(params),
login: false,
loading: true,
}).then((res) => {
var data = formatResult(res.data)
cache.set("goods_list", data, 86400)
resolve(data);
}).catch((error) => {
reject(error)
})
}
})
}
}
1
2
3
4
5
6
7
import goods from '../../models/goods.js'

goods.getList().then((res) => {
console.log("成功", res)
}, (error) => {
console.log("失败", error)
})
  1. 把参数处理和返回结果处理拆出来放到单独的处理方法里,方法名称保持统一: formatParamsformatResult
  2. 同时最外层定义好默认的 formatParamsformatResult ,如果不做特殊处理,直接使用默认即可(建议不处理也调用下默认方法,规范流程)
  3. 还有一点,model里方法命令有统一规范都是已 getaddupdatedel 开头

这个思路其实可以运用到任何场景,特别是在没有任何限定框架的场景,我们只需要按照这个模式去实现,代码一样很清晰漂亮。