开发规范

目录

  • 开发说明
  • 编码规范
  • 框架规范
  • 插件规范
  • 数据库规范
  • 类功能规范

开发说明

  • 正常开发只需要开发企业端,没有 Saas 的时候企业端就是总后台,有了 Saas,企业端就是子后台
  • 插件勾选了企业映射,则所有的代码开发插件对应目录的 merchant 下开发,总后台(backend)访问的 url 对应的代码在 merchant 下
  • 插件不勾选企业映射,总后台和企业后台的插件代码都是独立的

编码规范

  • 符合 PSR-1/PSR-2 的 PHP 编程
  • 方法和函数有注释,注释内容包括功用,参数,返回值,必要时还有示例
  • 方法命名规范,驼峰命名,不能出现下划线
  • 类属性规范,类属性和类方法一致,统一使用驼峰
  • 函数命名 小写字母加下划线
  • 常量全部大写下划线分割
  • 变量、函数名一律为小写格式
  • 属性名称开头小写驼峰
  • 类私有成员属性,下划线小写开头驼峰
  • 以标准计算机英文为蓝本,杜绝一切拼音、或拼音英文混杂的命名方式
  • PHP 的内建值 true、false 和 null 必须全部采用小写字母书写
  • 文件编码为 UTF-8,并关闭 UTF-8 BOM((Byte Order Mark))的功能。切记请不要使用windows自带的记事本编辑项目文件

框架规范

  • 自定义助手函数都放在 common\helpers\ 且方法都为static方法
  • Url助手函数必须使用 common\helpers\Url,用法和Yii2自带一样多了功能
  • Html助手函数必须使用 common\helpers\Html,用法和Yii2自带一样多了功能
  • 模型统一在common\models\下对应的是各个模块的模型,私有的表单模型可在各种应用/模块下面创建
  • 状态枚举统一调用common\enums\StatusEnum.php中的常量和属性
  • 每个应用下面应有一个基础控制器,做为该应用的父控制器,方便做一些公共操作,默认父类控制器为BaseController
  • 超级管理员在各自应用下的 config\params.php 的adminAccount项中定义其UID,超级管理员不需要进行RBAC权限检查
  • 公共别名在 common\config\bootstrap.php 中定义,使用 Yii::getAlias() 访问
  • View 视图调用 Model 的变量及数据不能直接调用,须控制器传递才可使用
  • Service 层在根目录下,统一带上Service后缀,例如TestService
  • Service 层不允许使用事务
  • Service 层如果需要当前用户信息必须通过传递参数获取
  • 企业 ID 为 1 的默认被总后台占用,如果使用多企业请不要占用该 ID

插件规范

  • 插件命名统一大写驼峰
  • 资源文件在 当前插件根目录/应用/resource下
  • 模型为当前插件的common/models下
  • 更新文件更新表结构时候无法触发事务,需要单独设定版本号避免全部事务触发失败

数据库规范

命名规范

  • 数据表名小写,多关键字使用下划线分割(关键字尽量全称)
  • 字段名小写,多关键字使用下划线分割(关键字尽量全称)
  • 禁止使用保留字并且尽量少用含有关键词来命名
  • 临时表必须以tmp_开头、以日期结尾,备份表必须以bak_开头、以日期结尾

基础规范

  • 所有的字段必须添加注释
  • 尽可能地使用InnoDB作为表的存储引擎
  • 数据库和数据表统一使用 UTF8MB4 字符编码
  • 所有的表和字段必须添加注释
  • 尽量控制表行数在500万以内
  • 尽可能采用冷热数据分离策略
  • 禁止以图片、文件等二进制数据

表设计规范

  • 尽可能每张表的索引数量控制在5个以内
  • 每一张InnoDB表都必须含有一个主键
  • 尽可能避免使用外键约束
  • 设置数据表架构应考虑后期扩展型
  • 遵循范式与冗余平衡原则

字段设计规范

  • 尽可能将所有的数据列定义为 NOT NULL 类型
  • 避免 ENUM 数据类型
  • json 存储的数据用 json字段代替 text
  • 表与表关联的键名保持一致或以关联表名的缩写为前缀
  • 固定长度的字符串字段务必使用 char
  • 使用 UNSIGNEG 存储非负整数
  • 禁止敏感数据以明文形式存储
  • 金额相关的数据必须使用 DECIMAL 数据类型
  • 尽量所有表有 status 字段来标注数据状态(-1:已删除,0:禁用,1:正常),业务状态请使用其他字段;status字段类型 为带符号的 tinyint(4)。如果还需要其他的数据状态 请先判断该状态的数据是有用的数据还是无意义的数据,有用的数据状态 > 2,无意义的数据状态 < -1
  • 所有的删除(除开清空回收站操作) 请标记 status 为 -1
  • 创建时间字段为created_at,修改时间字段为updated_at,类型int(10)
  • 用户关联 id 为 member_id
  • 企业 id 为 merchant_id
  • 多应用用户 id 混合使用字段用 user_id
  • 排序字段为 sort
  • 区分应用字段为 app_id
  • 区分插件来源需要增加字段为 addons_nameis_addon

类功能规范

Model(模型)
  • 数据库字段管理
  • 数据库关联管理
  • 数据库触发行为
  • 数据库入库验证
Form(模型 – 验证)
  • 对提交的复杂数据进行验证处理返回
View(视图)
  • 数据处理显示
Controller(控制器)
  • 数据接收
  • 服务调用
  • 简单CURD入库
  • 页面渲染
Service(服务 – 包含仓库「Repository」功能)
  • 数据逻辑处理
  • 数据入库
  • 数据查询 (Repository)

 

发表回复

登录... 后才能评论