首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
en20
V2EX  ›  程序员

问一下后端的同学为何你们传参都喜欢 int 1234

  •  
  •   en20 · 57 天前 · 12439 次点击
    这是一个创建于 57 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如接口要传一个请求来源,后端让我传的参是 1 拼多多, 2 淘宝, 3 京东 。。。

    为什么不能直接给一个字符串 '淘宝',反正都是要 switch case ,这样也很直观.接手别人的项目里一堆 1234 我都不知道传的是什么,也不写个 map,我很难受

    138 条回复    2020-06-08 11:40:48 +08:00
    1  2  
    mostkia
        101
    mostkia   57 天前   ❤️ 3
    应该这样写

    {"code":"✓","mesg":"发送成功"}
    {"code":"✘","mesg":"发送失败"}

    手动滑稽
    Airon
        102
    Airon   57 天前   ❤️ 1
    1.规避传参等字符编码问题
    2.方便兼容和后续改动,名字可能修改,但数字没有实际意义 (如 麦当劳 ->金拱门)
    3.数据库设计考虑 int 更节省内存 性能好 索引效率更高
    4.部分语言不支持字符串 switch-case
    感觉各有各的好处吧。
    en20
        103
    en20   57 天前 via iPhone
    @tantalu 这个确实头疼,后端数据多个空格多个回车以为自己布局 bug
    hillwall
        104
    hillwall   57 天前
    @mostkia 蛤蛤
    pushyzheng
        105
    pushyzheng   57 天前   ❤️ 1
    🐱:淘宝
    🐶:京东
    🐮:拼多多
    kojirou
        106
    kojirou   57 天前   ❤️ 1
    你们前端是不会用 enum 吗
    l00t
        107
    l00t   57 天前
    字符串的编码、拼写错误、大小写问题都比数字多啊。
    revalue
        108
    revalue   57 天前
    从头到尾没看到个好答案。都水过去了,可惜
    cz5424
        109
    cz5424   57 天前 via iPhone
    @revalue 准确的说没有你想要的答案。我就觉得他们说得在理。不过也是分情况的,返回字符串主要是方便展示,存储肯定是 int 方便,如果字符串万年不改,前端去 map 也无所谓
    yingo
        110
    yingo   57 天前
    @revalue 我觉得 102l 楼说的差不多了.
    yingo
        111
    yingo   57 天前
    @yingo #110 102 楼
    shiny
        112
    shiny   57 天前   ❤️ 1
    你们大多数设计出来的系统寿命都用不到拼多多改成拼夕夕的时候。
    这种臆想出来的需求是自己给自己加戏。
    MrYELiex
        113
    MrYELiex   57 天前
    你们写代码不用枚举的?
    tairan2006
        114
    tairan2006   57 天前 via Android
    数字+数据字典
    souths
        115
    souths   57 天前
    1 是给机器看的 淘宝是给人看的 建议搞下后端 一下子就明白了
    icylogic
        116
    icylogic   57 天前 via iPhone   ❤️ 1
    ……anti corruption layer 了解一下,像什么淘宝改名,本来就是应该在这一层解决的事情,而且不同子系统之间对数据模型的关注点不一样很正常……
    freakxx
        117
    freakxx   57 天前
    @icylogic #116

    哈哈哈就是这词,上次在 json 那讨论贴看到忘了
    namelosw
        118
    namelosw   57 天前
    @imlinhanchao 问题是用个列表就解决了……
    yanqiyu
        119
    yanqiyu   57 天前 via Android
    要我来设计可能会设计成 1,2,4,8,16
    还能表达淘宝+拼多多--->1|2
    算是被 C/C++给荼毒了吧,见不得额外开销
    90xchun
        120
    90xchun   57 天前 via iPhone   ❤️ 2
    你这都喜欢就是要干翻一船人的节奏呀,一大堆魔术值真的优雅吗?,enum 出了对外提供多套接口可能有客户端反序列化失败的情况,并没有其他大坑得,数据库查询效率的确存在,如果存在这样问题再想办法也来的急吧,况且代码是给人看的,数据库的字典表难道就不需要维护吗?我是不是随便基于某个类型的数据统计下,还要翻下码表。程序何苦难为程序员吗
    mxalbert1996
        121
    mxalbert1996   57 天前 via Android
    楼主是觉得整数比较和字符串比较是一样的?
    ArtIsPatrick
        122
    ArtIsPatrick   57 天前 via iPhone
    问这种问题的都不是专业程序员
    baobao1270
        123
    baobao1270   57 天前 via Android
    动态类型搞字符串方便,如果后端是静态类型语言,enum 不香吗?
    如果要前端显示出来的话,后端应当把要显示的值或映射传给前端
    CoderGeek
        124
    CoderGeek   57 天前
    后端可能是 enum 一个字典集
    code msg
    0 xxx
    1 xxx
    只是没给你全部返回给你定义了要传 code 而已
    如果换成把字典都返回给你 是否就没意见了
    romisanic
        125
    romisanic   57 天前
    似乎希望语义化的都是前端,希望使用数字枚举的多数是后端
    其实无非一个把枚举到语义转换的操作放在哪儿的问题,设计上肯定要分开,我可不想将来某个枚举改个名字要去改一堆的代码
    前端想要后端做好,我直接展示;后端觉得枚举有了,返给你 key 值你映射一下有什么难的嘛
    其实,对于一个量级比较大的服务,夸张点以谷歌为例,每天处理的空格的体积都非常大,如果返回去一堆汉字,那占用带宽更是大的多,前端 cache 一份枚举的缓存,针对枚举的字段客户端使用本地 cache 直接转换不挺好么
    另外,如果这个枚举在客户端有需要处理的业务逻辑,到处 switch 或者 if 淘宝、京东,不觉得很 low 么?反正如果后端用这样的枚举如果看到绝壁要骂人的
    这样涉及到不同环境,多个语言等情况,比较原始的类型比较安全,基本能始终保证统一,英文字符串也比汉字要强一些
    最后,我是后端 🐶
    binux
        126
    binux   57 天前   ❤️ 5
    退一步,我可以接受用 ["pinduoduo", "taobao","jd"],但是不接受用中文。
    因为一旦用了中文,就没有什么阻止前端直接拿它用来展示了。
    而一个会拿枚举类型直接展示的前端,将来一定会在拼多多改名的时候来要求后端也改名的。
    cepczkd
        127
    cepczkd   57 天前
    @ipwx 这还真不好说,好多人都不知道 360buy 是谁
    respect11
        128
    respect11   56 天前   ❤️ 1
    这种问题都能拉两页
    ilaipi
        129
    ilaipi   56 天前
    @ipwx #12 这不是认不认识的问题。假如发生改名问题,你系统里还显示老名字,你的客户会同意吗?你老板会同意吗?
    ipwx
        130
    ipwx   56 天前   ❤️ 1
    @ilaipi 骚年,这个名字(我假设是英文或者拼音)只是为了取代数字枚举,让开发人员开发的时候不至于每次都要查手册。本质还是个枚举,不能直接显示的。。。 就像 @binux 说的那样。
    ipwx
        131
    ipwx   56 天前
    前端无论如何都应该自己翻译后端过来的名字。。。
    tedzhou1221
        132
    tedzhou1221   56 天前 via iPhone
    @namelosw 我就是那个用 0 、1 、2 、4 模仿 linux 权限的人😏
    我们用一个状态码表示一个用户拥有多种权限
    GrayXu
        133
    GrayXu   56 天前
    带宽占用啊,这一项就相差非常多了。这都不做优化?
    0x1001
        134
    0x1001   56 天前
    @revalue 二楼说得挺好的,不是么
    imlinhanchao
        135
    imlinhanchao   55 天前
    @namelosw 因为在数据库存一个数字比存列表简单。
    namelosw
        136
    namelosw   55 天前
    @imlinhanchao 感觉这个算偷懒,多加个表关联就行了……
    imlinhanchao
        137
    imlinhanchao   54 天前
    @namelosw 加表性能上就差了。不過確實這種方法其實在嵌入式上應用比較多。
    cydleadingx
        138
    cydleadingx   33 天前
    做为一个后端,你要是能数据库是 int,对外接口是 string,只能说你很不一般
    1  2  
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1634 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 00:29 · PVG 08:29 · LAX 17:29 · JFK 20:29
    ♥ Do have faith in what you're doing.