• vue+koa+sequlize 搭建使程序员专注业务代码开发框架---使用方式和部分想法记录(三)


      之前说过了views文件夹以及前端代码打包相关的问题。现在说一下routers和controllers的问题。

      我们在开启服务后,会经过routes里面找到controllers中处理的具体方法。在此时我只添加了get和post的方法引用。我希望在使用的时候将业务基本完全划分开来。不增加不同业务模块的耦合,例如此时一个简单的商品管理系统,左侧的侧边栏已经具有商品管理、订单管理,这时假设我想增加一个新的栏目叫做客户管理,那么我们需要进行如下几步。

    1. 在client的src中新建一个customer的文件夹。其中写客户管理的前端代码。
    2. 在server中的routes文件夹内部新建一个customer.js,用来存放这个业务线的所有请求。
    3. 在server中的controlles文件夹内部新建一个customer文件夹,用来存储前端请求过来之后的一些逻辑处理
    4. 在server中的services文件夹内部新建一个customer文件夹,用来使用调用数据库的不同语句,进行数据的处理。
    5. 对于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的洋葱模型理解都有了很大的进步。慢慢来啦。总结不足,慢慢的把事情完善。---来自一条前端咸鱼的挣扎。

              

  • 相关阅读:
    windows安装python2.7后的注册(registry)问题
    用python解析pdf中的文本与表格【pdfplumber的安装与使用】
    python pdfplumber用于pdf表格提取
    python xlsxwriter写excel并操作各种格式属性
    ShellExecute, WinExec, CreateProcess区别
    Python调用Windows外部程序
    pynput使用简单说明
    有关/proc/uptime这个文件里两个参数所代表的意义
    Beyond Compare 4 提示错误“这个授权密钥已被吊销”的解决办法
    Android: adb push apk 到 system/app 目录时报“remote Read-only file system”
  • 原文地址:https://www.cnblogs.com/acefeng/p/11321364.html
Copyright © 2020-2023  润新知