良好编程
防错性编程
需要check的场景 // 数据产生方式不可控。数据经过不可靠的通道、或者来自普通用户的输入。
多个系统间的调用、一般是多进程间的网络调用、比如service的入口函数。
不需要check的
一般是一个进程空间内部。
模块内部函数之间的调用
目标明确的库函数
正常情况下、应该避免错误调用导致进程崩溃。但是库函数在有清晰说明的情况下、可以接受崩溃的情况发生。
参考 http://blog.jobbole.com/101801/
failfast、尽早检查出错误、退出程序
逻辑更清晰
错误校验和业务处理分离、业务处理可以不用做放错check、使得业务代码会清晰简单很多。
把check放到入口处、后面的代码就不需要再check了、直接默认正常去处理。避免代码中出现到处check的烦恼。
性能更好
避免后续的工作浪费、提高性能。尤其是避免出现已经做了部分db查询、突然发现输入的参数格式不对。
异常与返回值
如果函数的返回结果是个明确的错误、业务无法继续处理了、用异常。
如果函数返回后业务还会继续、只是会因为返回的不同而走向不同分支、用返回值。
异常要跟名字一样、真的是异常了、而不是仅仅是个逻辑转向。
参考 http://typethinker.blogspot.com/2007/04/checks-exceptions-and-assertions.html
最小惊奇
tbl_address命名
management的表设计
参考 https://en.wikipedia.org/wiki/Principle_of_least_astonishment
命名
避免无意义、尽量有描述性。
不要太短、不要太长。
避免太长的方法
缩写
常见缩写
能快速理解的缩写
增加注释后能容易理解的缩写
tip法
可以只取业务语义中的一部分、能使人在简短注释后、快速联想到完整的语义。
举例 // 时价
如果给时价取名词
可以考虑:timing_price、而不是time_price
长度适中、能表达语义
如果要表达是否时价
time_price或者timing_price是名词、这里需要的是个形容词、所以这里取名的关键是找一个合适的形容词、或者自己造一个形容词。
直观方案:is_timing_price、但是不准确。因为这个值如果放到sku上、修饰的是sku、但是sku不是个price、is_timing_price让人感觉sku是个price、略怪。是timing去修饰price、不是price修饰sku。
更好的表达:price_is_timing或者price_timing。因为sku是个名词实体、这样选择后、price_is_timing或者price_timing就是个形容词、用来修饰名词、语法上会顺畅很多、不会让人觉得哪里不对。
取一半语义的tip方式:timing。这种取名法在首次看到的时候、需要一个注释、但是因为关联性强、看一眼也能快速记住、也是可选的方案。优点是短、缺点是需要注释。
logging
输入输出要log
能用输入信息简单推到出的信息不要打印
复杂计算后的的中间状态需要log
分支流程一般不需要打印、因为一般可以用输入信息或者中间状态推理出来
sql应该打印、但是可以放在debug模式
推荐书籍
代码大全
unix编程艺术