数字很难标明业务含义,大脑难记忆,前端的沟通成本增加,传错数字后,数据则插错表,调试定位困难,消耗了精力。
解决方案是: 避开数字标识。客户端使用字符串为参数,告诉服务端,如微信的支付类型使用trade_type=JSAPI|MWEB分别表示公众号支付和h5支付。这里若使用数字,确实难以理解业务意义。淘宝开放给商家的api查询指定订单状态,使用的为字符串status=WAIT_BUYER_PAY|WAIT_SELLER_SEND_GOODS。数据库存储的是数字,服务端做了一层转换成数字的操作。
http://open.taobao.com/docs/doc.htm?articleId=102856&docType=1&treeId=1
交易状态
-
-
WAIT_BUYER_PAY:等待买家付款
-
-
WAIT_SELLER_SEND_GOODS:等待卖家发货
-
-
SELLER_CONSIGNED_PART:卖家部分发货
-
-
WAIT_BUYER_CONFIRM_GOODS:等待买家确认收货
-
-
TRADE_BUYER_SIGNED:买家已签收(货到付款专用)
-
-
TRADE_FINISHED:交易成功
-
-
TRADE_CLOSED:交易关闭
-
-
TRADE_CLOSED_BY_TAOBAO:交易被淘宝关闭
-
-
TRADE_NO_CREATE_PAY:没有创建外部交易(支付宝交易)
-
-
WAIT_PRE_AUTH_CONFIRM:余额宝0元购合约中
-
-
PAY_PENDING:外卡支付付款确认中
-
-
ALL_WAIT_PAY:所有买家未付款的交易(包含:WAIT_BUYER_PAY、TRADE_NO_CREATE_PAY)
-
-
ALL_CLOSED:所有关闭的交易(包含:TRADE_CLOSED、TRADE_CLOSED_BY_TAOBAO)
-
-
PAID_FORBID_CONSIGN,该状态代表订单已付款但是处于禁止发货状态。
什么情况下使用数字标识?
只有两种状态,0和1,开和关,容易使用数字来表示,超过2种,难记住数字代表的含义了。即便只有两种状态,使用字符串也比数字更加容易理解业务意义。
如使用on来代表开启,使用off来代表关闭。非常明确。若使用1和0来标识,1到底是删除还是不删除,如果没有注释说明,需要去猜测,每个人设计习惯不一样,增加误解。
给外部看使用字符。而数据库存储,使用数字存储
数据库之所以存储数字,有一些好处:
- 数字减少存储空间,空间减少,表体积越小,性能越好。
- 数字的查询性能更好:做比较判断和范围筛选)
- 可以灵活适应变化。以后需求改变了,转成任意文字显示,做数字到文字之间的映射,会很方便。如果使用字符串存储
在这方面,踩过一些坑,如代码调用出错、出现bug难定位原因、增加误解、耗费沟通时间。开发人员陷入到不必要的麻烦中去。
总之,有个原则,代码中无论是函数、变量、类的命名,能准确表达业务含义的命名,就是好的命名。