vue+koa+sequlize 搭建使程序员专注业务代码开发框架---使用方式和部分想法记录(三)
之前说过了views文件夹以及前端代码打包相关的问题。现在说一下routers和controllers的问题。
我们在开启服务后,会经过routes里面找到controllers中处理的具体方法。在此时我只添加了get和post的方法引用。我希望在使用的时候将业务基本完全划分开来。不增加不同业务模块的耦合,例如此时一个简单的商品管理系统,左侧的侧边栏已经具有商品管理、订单管理,这时假设我想增加一个新的栏目叫做客户管理,那么我们需要进行如下几步。
- 在client的src中新建一个customer的文件夹。其中写客户管理的前端代码。
- 在server中的routes文件夹内部新建一个customer.js,用来存放这个业务线的所有请求。
- 在server中的controlles文件夹内部新建一个customer文件夹,用来存储前端请求过来之后的一些逻辑处理
- 在server中的services文件夹内部新建一个customer文件夹,用来使用调用数据库的不同语句,进行数据的处理。
- 对于dao,modules我们需要确定一点,是否有新的数据库表的产生,以及是否会有新的数据库行为。才来判断是否需要新建新的文件来区分这个业务线。
一、routes
对于routes里新建的文件,规范使用数组的形式进行映射。
['GET', '/addUser', '../controllers/test', 'addUserControler'],这句的大致含义是使用GET请求,前端请求路由是/addUser,在controllers的test文件内部找到addUserControler,(当然我知道现在写的还是很简陋的。后期我会慢慢整理一下这些问题,比如后期我更希望的是路径不按照'../controllers/test'这样的方式去写,而是变成一个Controllers.Test这样的方式,感觉看起来会顺眼很多)。当然要注意一点我在添加路由请求的时候是直接遍历routes文件夹内部的所有文件,然后将其拼接成一个完整的数组,之后再进行遍历,所以如果不同routes内部的文件,有了相同的路由请求是会被覆盖的啊。所以建议每一个业务线有一个前置的路由区分。
二、controllers
我们的请求从routes这时就到了controllers层中,在其中我选择了使用class进行编写。(所以我碰到了一个小问题,对于routes注册路由的时候,即使都打到了同一个controllers内部的方法,那我也直接每一个都new了一个class,所以导致了this指针出错。因为new的实在太多了。故而我现在只是会new每个文件内部的第一个controllers内部的类,当然也会出现错误的。因为如果我想路由直接打到不同的类中进行使用时候,如果不是写在第一个就会出错,之后我会写一个映射。维持它的单例存在。现在先这样吧.....其实想想本身这个问题是不应该有的,因为希望不同的业务不产生耦合,那就没必要在这个routes,引用另外controllers里的方法啊,理应完全保持一致的。)。
在其中抽离了一个baseController,作用是我们可以将一些常用的方法抽离到这个里面,方便实用。
三、services
这层的设计和controlles差不多。只是在使用的时候要注意俩者的都是用来作什么的。这一层除了单独和数据库打交道,我们也可以把这一层当做对于其他服务发请求的位置。例如我们给其他的java服务器发请求就可以在这里,之后返回数据到controlles。还是那句话。期望controlles里面不要有任何数据的处理,仅仅对业务逻辑处理。
四、dao
这里就是存放的所有数据库打交道的语句了。由于使用了sequlize,所以这里基本就是对于数据库的增删改查等等了。这里就不进行业务的区分了。仅仅对于数据库表的区分而已。所以在前面的流程说明上说过不需要在业务层面上考虑dao和modules的问题。
五、modules
对于数据库的表进行对接,这里存放的都是每一个数据库的表结构。例如这里一个例子
'use strict'; module.exports = function (sequelize, DataTypes) { return sequelize.define('User', { id: { type: DataTypes.BIGINT(20), allowNull: false, primaryKey: true, autoIncrement: true, field: 'id' }, login_name: { type: DataTypes.STRING(45), allowNull: false, field: 'login_name' }, password: { type: DataTypes.STRING(50), allowNull: false, field: 'password' }, phone: { type: DataTypes.STRING(15), allowNull: false, field: 'phone' }, user_name: { type: DataTypes.STRING(45), allowNull: false, field: 'user_name' } }, { tableName: 'user' }); };
小结:总结写的很烂,基本是想到哪里写到哪里,现在还是有很多很多的问题。很多业务场景没有完善。例如假如需要一个路由经过多个方法怎么办,结构文件全都写在了项目里面,导致项目乱的一笔。其实更重要的是自己搭建的这个过程。对于webpack、js的新语法。koa的洋葱模型理解都有了很大的进步。慢慢来啦。总结不足,慢慢的把事情完善。---来自一条前端咸鱼的挣扎。