编程规范(编码习惯/风格)

以下是个人开发多年、严格要求自己和团队其他人的编程规范

一、编程规范(编码习惯/风格)

1.代码要求:
代码要注释清晰、整洁精简易读性、健壮性(任何访问方式都不会出现系统崩溃,如改变参数数量和类型)、容错性(校验和异常、错误处理,如数据库停止)、业务逻辑封装化(模型层或助手);
以上代码均要至少符合PSR4标准格式。
参考代码网址: http://www.cnblogs.com/woider/p/6440844.html
http://blog.csdn.net/zhaoxuejie/article/details/52242140

2.控制器要求:
①控制器只负责控制流程,简单的逻辑,复制的逻辑和业务放置到Model层或者单独封装的助手类;

②控制器都要继承一个基类/抽象类,把共用的函数都放在基类里面,易于扩展和让继承的子类都可以调用,避免每个子类都写同样的功能函数;

③Action多的话分开多个控制器,不能把所有Action都集中在一个控制器里面,可以按版本划分控制器,或者按功能;

④一个Action最好不要超过两百行代码,通用的代码功能可以封装成函数或者助手类,添加到框架服务里面,使用的时候调用一下就行;
不同功能不能放在同个Action(方法)里面;

⑤插入的字符串必须做长度校验,不能把post过来的数据直接插入DB,都要进行过滤和校验,避免造成DB崩溃或者超出长度发生500错误;

⑥如果怕公用文件common或者公用助手冲突,可以一个人写一个,但是命名一定要按功能来命名;

⑦代码中相关数据库的CURD不能放在控制器里面,最好都放到Model层或者自己封装的类;

⑧每一个数据库操作CURD都要做log日志记录,即使数据库停止也可以正常返回异常信息,而不是直接返回500;

⑨客户端上传的图片、大图必须压缩,减少服务器带宽和资源占用率。

二、数据库设计:

1.数据库设计字段类型不要使用tinyint类型,除非只存储0或1,不能存储2或以上,不然系统可能会识别成Boolean类型;
数据库设计每张表必须有主键【id】且为自动增长,对于唯一性的字段建立唯一索引;
所有时间字段都改为datetime类型,如果查询需要时间戳的话,在sql中转化一下或代码转化;
(一般都要设置created_at, updated_at, deleted_at作为创建、更新、删除的时间,便于查看和逻辑删除,目前系统都没有,这个可以按实际需求)

2.数据库查询或CURD的参数要用占位符(id = :param_id 然后再设置param_id值),不能使用最原始连接的方式(id = {$param_id});
表id的命名不能跟编号混在一起,编号统一叫num或其他,不能叫表名+id,这样非常不规范,很容易让人误解是id还是编号num;
表名test_table在其他表my_table的外键一定要命名规范,例如:test_table_id,所以不能跟编号命名混淆,不然很容易理解外其他表的外键;
自己做的模块需要修改数据库或添加字段的时候一定要通过QQ或者内部约定的通讯方式通知其他项目相关开发人员。

3.代码中如果涉及多个CUD数据库操作的一定要使用事务回滚机制,进行事务集中,保持数据的原子性,使用InnoDB存储方式;

4.数据库设计时,字段不能命名MySQL的保留字(关键字),这样避免移植性或者代码异常性的问题;

5.查询数据库的时候尽量不要查询所有字段,这样会降低查询效率和浪费不必要的资源;

三、作为开发者要有严谨的异常处理习惯和正确的异常处理方式,不然很容易造成程序的容错性、健壮性低。

编程异常处理流程