软件开发规范

数据库#

  • 1、数据库 in 操作集合元素控制在500以内,最多不能超过1000个
  • 2、避免使用replace into写入数据(并发操作非常容易死锁),考虑on duplicate key update代替
  • 3、join联表尽量不超过3张表,使用小结果集驱动大结果集
  • 4、like尽量避免全模糊和左模糊,右模糊查询可以使用索引,全模糊查询可以用instr代替,效率更高一点
  • 5、SQL优化的目标:至少达到range级别,要求ref级别,consts最好。
  • 6、禁止使用存储过程,存储过程难以调试和扩展,没有移植性。
  • 7、外键以及级联更新尽量避免,可在应用层去处理。(根据应用使用场景去考虑,外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞)
  • 8、禁止动态创建或修改表结构,即在应用中去创建或修改表结构
  • 9、操作DB时条件中有用户输入的参数 必须做预处理操作,避免sql注入风险。
  • 10、能使用主键的时候必须使用主键
  • 11、如果使用varchar,长度不超过5000,否则字段类型定义为text,并考虑独立出一张表,使用主键对应,避免影响其它字段的索引效率
  • 12、建立组合索引时,区分度最高的,放在最左边。
  • 13、业务上有唯一特性的字段,即使是组合字段,也必须建成唯一索引。
  • 14、禁止在数据库中存放文件内容和图片
  • 15、必须使用UTF-8字符编码(历史原因可忽略,腾讯项目很多由于历史原因,使用的是latin1编码)

语言层#

  • 16、严禁在foreach/for/while遍历中操作DB(除非在没有更好的方法或需求需要的情况下)。
  • 17、对外部依赖连接密码做aes加密
  • 18、应用配置需区分环境,可在不同环境切换不同的配置信息
  • 19、尽量少的使用全局变量
  • 20、可以有少量的字段冗余,但是必须考虑维护成本以及占用空间
  • 21、无需外部依赖可以解决的场景 尽量不使用外部依赖(过多的外部依赖会造成应用后期难以维护,迁移增加难度)
  • 22、能用php自有函数解决的问题,尽量使用php自有函数(除了大数据处理对算法要求比较高,或自有函数效率比较低)
  • 23、业务逻辑中不被二次改变的值,尽量定义成宏定义const 常量名为全大写和下划线组成
  • 24、变量名要有意义,尽量不要使用在变量名中采用 1/2/3数字去定义
  • 25、方法名和类名,使用驼峰法命名(腾讯内部有些人会命名成下划线形式,但我们自己必须使用驼峰法命名)
  • 26、必要的注释不能少
  • 27、必要的操作日志/流水日志不能少
  • 28、错误异常日志必须记录
  • 29、异常处理集中处理,避免分散到代码各处
  • 30、根据不同场景定义不同异常
  • 31、尽量少的多层if判断,可独立出来的代码块需封装成可用方法
  • 32、可通用方法必须封装成公用方法,避免代码冗余
  • 33、避免使用绝对路径
  • 34、必须对外部数据进行合法性验证,参数验证统一集中处理(特殊框架,可采用框架中约定规则,如Yii2 ,可使用rules验证)
  • 35、严禁使用php危险函数
  • disable_functions= dl,assert,exec,popen,system,passthru,shell_exec,proc_close,proc_open,pcntl_exec
  • 36、代码整洁
  • 方法名 类名 {} 符号 换行 ,每个方法之间空一行 如:
funcname
{
}
funcname
{
}
避免代码紧凑,空格使代码美观 如:
if (...) {
...
} else {
...
}

文章作者:xcent
原文地址:https://xcent-blog.vercel.app/
版权声明:文章采用 CC BY-NC-SA 4.0 协议,转载请注明出处。