MVC层级架构
M-V-C(model-view-control)是非常经典的一种web项目架构,将项目分为模型,视图和控制三大层。
这是我自己搭建的一种mvc架构:
│ app.js
│ package-lock.json
│ package.json
│
├─control
│ ├─routes
│ │ userRoutes.js
│ │
│ └─service
│ userService.js
│
├─model
│ resp.js
│ user.js
│
├─node_modules
│ //...
│
├─static
│ data.json
│
├─utils
│ sqlUtil.js
│ stringUtil.js
├─midwares
│ exhandler.js
│
└─views
index.html
模型:实体类
视图:页面
控制:各种控制(逻辑、视图等)
他们各自还可以细分层次:
model层
所有模块需要的模型都放到这里
model可以按照其用途、服务对象等分成普通对象、数据传输对象、完整对象的散对象、数据表映射对象等等,比如po, dto, vo等等,之前sequelize中的模型就算是数据表映射对象。
当然这是一个跨语言的概念,由于js天生没有类型系统,很多时候你可以选择不定义某些对象,有更高的灵活性,定义对象,虽然灵活性降低,但更易于代码维护,看实际情况决定,当然,一些高复用性的建议定义好,比如给REST接口统一的返回格式,那你就可以专门设定一个对象:
let resp = {
code: null,
msg: null,
data: null,
Ok: (msg,data)=>{
this.code = 200;
this.msg = msg!=undefined? msg : 'success';
this.data = data!=undefined? data : null;
}
}
let respOk = {
code: 200,
msg: 'success',
data: null
}
module.exports = {
resp: resp,
respOk: respOk
}
控制层
所有功能模块的路由,服务等等都放到这里
控制层可以再根据特性分层,比如路由单独搞个routes层,业务处理单独搞个service层等等
补充
同样的,实际开发中需要更多的目录,比如工具目录,资源目录等等,放你的图片,放你的工具函数,放你封装好的sql函数,放你的中间件等等