其实数值类型(整形)做逻辑/状态标记是业界通行的做法,无论前后端都应该遵循的。
优势在:
- 数据状态稳定。也就是说,你今天male代表男,那如果传来了个MALE呢?或者mALe呢?(更极端点,如果你还想用中文的话,你还要折腾各种utf8/gb2312/gbk/gb18030之类的东西——如果你觉得这些不复杂,那我可以保证一定是因为你见识太少)。如果你说你会在传输/存储时加一句tolower(),或者有一个类似功能的封装——那你封装一个返回0/1的togender()不也是一样?总而言之,作为数据,你要进行各种判断或者处理的前提必须是:稳定唯一(定态)的,而数值类型天然就是定态的,所以是不言自明的。
- 说完定态就要说另一个相关的概念:定长。对于计算机系统来说,定长的数据,无论在传输、拆组包、存储、计算过程中,无论在时间复杂度、空间复杂度、逻辑复杂度上看,都是有极大优势的。这甚至会影响各种系统的设计——例如说计算各服务器的负载能力,以及判断现有系统是否需要扩容等。
- 整形的数值有聚集性。也就是说,大家都从0(有时0当作未定义,则会从1)开始递增,所以不同状态之间的数值是很接近的,这会为很多逻辑判断带来简便。例如说:合法性校验——如果0/1代表男女的话,你收到一个大于等于2的值,那你就知道一定出问题了。即使你把性别扩展到56种,那也是简单的拿56判断一下而已。但如果你用非整形,那你需要顺序把56种数据全都扫一遍才知道是否合法。
- “计算机中任何问题,都可以用多加一层抽象来解决”——而数值类型代表id,本质上也是一种抽象。也许它在你当前的系统中不一定是为了解决些什么当前的问题,但是作为一种预留措施,它可以看作是一种保护性设计。
总而言之
我感觉后台是在随意转呢!他们没有任何理由,拿到就胡乱转吗?
你要说0代表男1代表女,还是0代表女1代表男,这确实一般是随便定的,甚至有些时候临时想到了随手加一个都有可能(例如说性别里,加一个2代表“保密”)。
但转成整形这件事,是有道理的。甚至如果你的团队流程规范点的话,你设计一个接口,里面的用了字符型而不是整形,往往会被重点关照,看你是不是有非常特别的迫不得已的理由这么干——但绝大多数情况下,都没有什么理由非常特别的迫不得已到需要这么干。
京东物流有个接口,包裹状态就是中文;电信物联网平台有个接口,卡状态也是中文。
对接的时候,真想问候这些程序员的女朋友。
虽然说这就是个习惯问题。
但是前端分不清value和presentation还是令人遗憾……
要后端真给你男女,你做localization的时候就爽死了……
其实要我说,我也会认为magic number缺少可读性,但是标识符用M/F就完了,真用男女那真是好玩了……
去表现化反而应该是前端提出来才对……