我们知道在PHP开发中有经典的MVC的分层开发模式,即数据(model)、视图(view)、控制(controller)三层代码结构。一般在实际中我们会在model层和controller层中间加一层services层,进一步将业务逻辑细化拆分。那小程序中如何实现这一代码结构呢。
首先,小程序中的视图层就是wxml文件,那js文件可以简单类比为控制层。简单开发的话,我们一般会直接在JS文件中调用数据接口获取数据。但是这种方式如果是比较复杂的项目,有很多复杂结构的业务逻辑的话,那JS文件就会变的异常臃肿和杂乱,那我们如何简单拆分成多个层次呢。
我们可以加一个services层和一个model层。在services层中接受model层的数据,并进行各种业务逻辑的处理,然后开放给JS文件调用。具体如何实现数据和方法在各个层次和文件的流转呢。
我们先在pages目录评级的目录下建一个model目录和一个services目录,然后下面在根据各个业务模块创建业务目录,然后业务目录下创建相应的JS文件,如下图所示
在model层的文件中使用export语法,将数据变量开放出去,然后在services的文件中使用require语法即可使用model中的数据,然后在将services中的处理方法export出去,pages下的JS文件再使用import语法将方法引入,就可以直接使用了。
具体的代码如下所示:
model/goods/goodsList.js
export const goodsList = [
{
id:1,
img:'https://hupc-blog-photo.oss-cn-beijing.aliyuncs.com/wp-content/uploads/2022/12/6f012a8ad2e64aa6d7fa8cc9cfdcf0.jpg',
price:298,
title:'精美礼品',
tag:'2023春季爆款',
groupid:100011
},
];
services/goods/goods.js
const goodData = require("../../model/goods/goodsList")
/**
* 根据groupid获取商品数据
* @param {*} groupid
*/
export function getGoodsDataByGroupId(groupid){
var return_data = []
if(groupid == ''){
return return_data
}
goodData.goodsList.forEach(function(item,index){
if(item.groupid == groupid){
return_data.push(item)
}
})
return return_data
}
pages/goods/list/index.js
import {getGoodsDataByGroupId} from "../../../services/goods/goods"
// pages/goods/list/index.js
Page({
/**
* 页面的初始数据
*/
data: {
goodList:[]
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
var groupid = options.groupid
var goodList = getGoodsDataByGroupId(groupid)
this.setData({
goodList:goodList
})
}
})