软件开发规范
#
数据库- 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、代码整洁
- 方法名 类名 {} 符号 换行 ,每个方法之间空一行 如:
文章作者:xcent
原文地址:https://xcent-blog.vercel.app/
版权声明:文章采用 CC BY-NC-SA 4.0 协议,转载请注明出处。