前后端矛盾,大家都怎样处理的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lindenYou
V2EX    问与答

前后端矛盾,大家都怎样处理的?

  •  
  •   lindenYou 2022-01-18 19:56:05 +08:00 2792 次点击
    这是一个创建于 1412 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想问一下大家平时工作当中都遇到过哪些前后端开发时的矛盾?以及是怎么处理的?

    我暂时能想到的三个方面:

    • 数据的格式

    比如前端展示需要的是一个树结构,后端数据库存的是表结构,由谁来处理比较合理?

    • 数据格式验证

    非空验证,和电话、邮箱等格式的验证等,前后端都可以验证,由谁来处理?

    • 防重和并发问题

    前端按钮防重,后端接口加锁等,前后端都可以防重,由谁来处理?

    19 条回复    2022-01-19 13:06:09 +08:00
    ruandao
        1
    ruandao  
       2022-01-18 20:06:13 +08:00
    数据的格式:graphql
    数据格式验证:前后端都要做
    防重和并发问题:都要做
    MarkLazy
        2
    MarkLazy  
       2022-01-18 21:26:27 +08:00
    看你们团队谁强势一点咯
    renmu123
        3
    renmu123  
       2022-01-18 21:35:23 +08:00 via Android
    1. 看谁拳头大
    2 ,3:后端必须要做,前端最好可以做
    rockddd
        4
    rockddd  
       2022-01-18 21:38:29 +08:00   1
    1.后端
    2.都校验
    3.都要做
    leafre
        5
    leafre  
       2022-01-18 21:49:22 +08:00   1
    第一点,有 BFF ,前端做,没有 BFF ,后端聚合
    后两点,前后端都要做
    foam
        6
    foam  
       2022-01-18 21:59:47 +08:00
    很多边界问题 没有唯一的准则。大多根据
    1. 谁受益谁来做
    2. 两边都能做的情况下,衡量 ROI ,很多情况下需要有话语权的人判断和拍板
    3. 如果你水平足够,代入到领导的视角,如果你是领导,你会让谁来做?此时你会脱离自身利益,看问题看得清楚些

    回到你的具体问题
    1. 数据结构:前后端应当维护一个资源结构并达成共识。后端返回共识的结构即可。后面 UI 有变动导致的 数据渲染(表示)层变动,前端来处理就好。即,不考虑 UI 具体结构,只从资源关系上定义好数据结构。

    2. 用户输入验证:
    - 前端:应当最大限度把不合法的请求拦截掉,避免对服务端发出无用请求,从用户体验来看,也会更好。但一些重逻辑的判断,可以透传给后端判断,避免前后端不好维护这类重逻辑。
    - 后端:必须要判断。永远不要相信用户的输入时第一原则。微服务中的内部服务间的“前后端” 则看具体设计和取舍了

    3. 并发和防刷
    - 前端:要做。考虑的是用户体验 和 后端压力的缓冲。
    - 后端:看具体需求决定,有些无关痛痒的需求就没必要加锁了,前端做了就行。涉及金钱或者会影响需求的正常实现的,那就必须要做了,否则就是 bug 了。
    Kaier
        7
    Kaier  
       2022-01-18 22:00:23 +08:00   1
    关于 BFF (前端来做的话)...
    看到过一段描述: "矛盾一直会存在, 只是 BFF 把这一层矛盾由 '敌我矛盾' 转变成为了'人民内部矛盾'
    XD
    daimubai
        8
    daimubai  
       2022-01-18 22:21:24 +08:00
    1. 后端转成树结构(利用递归或者 ORM 框架,一般是后者)
    2. 前后端都需要做,比如对于电话和邮箱验证,前端可以不请求接口就完成,而且可以做用户操作,比如让输入框抖一抖,使用同一套正则比较好
    3. 前后端都需要做,前端按钮防重其实也属于产品设计范围内
    ch2
        9
    ch2  
       2022-01-18 23:03:06 +08:00
    不分离的时候都是一个人做的
    wanguorui123
        10
    wanguorui123  
       2022-01-18 23:06:01 +08:00
    后端做,前端选择性优化
    jqtmviyu
        11
    jqtmviyu  
       2022-01-18 23:07:23 +08:00
    1. 我希望是后端做, 不做也没法, 丢递归里处理下
    2. 前端后端都要做, 正则匹配下非空和格式, 等到提交再报错体验不是很好
    3. 不太明白指什么, 不知道是不是防抖的那套, 反正我是 loading, 遮罩层, 防抖都看情况上
    ayase252
        12
    ayase252  
       2022-01-18 23:15:32 +08:00
    2,3 前后都做,前端做是为了用户体验、后端做是为了安全
    constantine008
        13
    constantine008  
       2022-01-19 09:38:15 +08:00
    上面的回复说 2 ,3 前后端都做,楼主不要有后端可做可不做的错觉,不管前端做不做,后端一定要做的。你有用 postman 调过后端接口吗? postman 会帮你校验参数吗
    Cbdy
        14
    Cbdy  
       2022-01-19 09:42:04 +08:00 via Android
    1. 前端
    2. 前端 + 后端
    3. 前端
    lindenYou
        15
    lindenYou  
    OP
       2022-01-19 09:49:20 +08:00
    @foam 如果说对于 2 ,3 问题后端就是不做,怎样处理这个问题呢?或者说有一方就是偷懒,不做。抛开从技术处理的角度来说,怎样避免这样的问题发生?前后端的工作职责应该怎样划分?团队的管理应该怎样处理这样的问题?
    DrakeXiang
        16
    DrakeXiang  
       2022-01-19 11:53:41 +08:00
    数据校验后端不做是挺严重的安全问题啊,这个技术老大能允许?如果真允许那就不用管,反正前端一般也要做校验,真出了事也赖不到你头上,然后找机会换个公司吧。
    yueqianzhang
        17
    yueqianzhang  
       2022-01-19 12:06:56 +08:00 via iPhone
    我觉得拦截验证,叫不准会不会变的规则,前端做轻拦截就行,比如手机号多少位之类的,因为号段会不断变化
    yueqianzhang
        18
    yueqianzhang  
       2022-01-19 12:07:31 +08:00 via iPhone
    针对于 iOS Android 这种客户端
    foam
        19
    foam  
       2022-01-19 13:06:09 +08:00 via Android
    @lindenYou
    在技术设计评审环节需要有人把关,如果后端没有人懂这个或者后端 leader 也不想管,要么他换人,要么你跑路。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2803 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 13:05 PVG 21:05 LAX 05:05 JFK 08:05
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86