【编程规范】项目规范与约束

2022/12/09 15:18:50

不同的框架有不同的编码风格,比如 Vue 中建议将组件命名为 AddressPicker.vue ,而 Angular 的组件命名风格为 address-picker.components.ts

没有一套编码风格可以适配所有项目,但是应该确保在一个项目中只有一种编码风格,并且贯彻到底。

项目结构及文件命名

不同框架有不同的项目结构,这里列出几种。

项目中的目录、文件名大小写,单词是否使用复数形式都要保持统一,避免出现多种风格。

以业务逻辑作为组织标准

例如一个 Nest 项目。

尽可能的将一个业务逻辑相关的内容放到一起,公共内容统一放到 common 目录下,全局配置相关统一放到 config 目录下。

目录名统一小写。

文件名添加功能后缀标明文件功能,多单词文件名用 - 分隔,不使用驼峰式命名。

- src
  - module    # 业务模块
      - upload
          - upload.controller.ts
          - upload.module.ts
          - upload.service.ts
          - upload.pipe.ts
      - resource
          - resource.module.ts
  - common    # 通用内容
      - constant
          - router
              - router.constant.ts
      - service
          - config
              - config.service.ts
      - table
          - update
              - update.table.ts
          - resource
              - resource.table.ts
      - util
          - number
              - number.util.ts
          - date
              - date.util.ts
      - middleware
          - front
              - front.middleware.ts
          - user-agent
              - user-agent.middleware.ts
  - config    # 配置信息
      - server
          - server.config.ts
      - database
          - database.config.ts

以文件功能作为组织标准

例如一个 Vue 项目。

尽可能的将相同功能的文件放到同一目录下。

目录名统一小写。

组件和 js 全部使用大驼峰风格命名。

- src
  - pages
      - home
          - index.vue
      - detail
          - index.vue
  - components
      - model
          - Model.vue
      - picker
          - Picker.vue
          - DatePicker.vue
  - images
      - tabbar
          home.jpg
          home-lh.jpg
  - services
      - common
          - router
              - RouterService.js
      - bussiness
          - detail
              - DetailService.js
          - order
              - OrderService.js

  - styles
      - home
          - index.css
      - detail
          - index.css

class 类

  • 不要导出默认模块

    尽量避免使用 export default 直接导出一个默认模块,导出默认模块时,导入方可自定义名称:

    • /module/a.js
    export default {
      name: "zhang",
    };
    

    对于模块 a.js,可以用以下任何命令导入:

    import a from "./a.js";
    import b from "./a.js";
    import c from "./a.js";
    

建议

  • 导出具体的属性

    export const name = "zhang";