前端发来的数据包含增删改查多种操作时,应该如何接收处理? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SystemLight
V2EX    Java

前端发来的数据包含增删改查多种操作时,应该如何接收处理?

  •  
  •   SystemLight
    SystemLight 2021 年 8 月 21 日 3492 次点击
    这是一个创建于 1628 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. 业务场景类似 Excel 表格,修改数据包含增删改查各种操作
    2. 当全部修改完毕后提交,如果后台保存失败,此次提交所有操作回滚
    3. 这种场景通过一个事物如何处理
    15 条回复    2021-08-23 10:11:39 +08:00
    sutra
        1
    sutra  
       2021 年 8 月 21 日
    这个问题问的是哪个领域的?修改文件?修改关系型数据库?
    SystemLight
        2
    SystemLight  
    OP
       2021 年 8 月 21 日
    @sutra 前端和后端应该传输什么样的数据格式,才能利于后端分析出前端此次做了哪些操作,或者应该用怎样的方式得出前端此次操作内容,然后放到一个事务中处理
    FieldFarmer
        3
    FieldFarmer  
       2021 年 8 月 21 日 via Android
    我记得以前碰到过这种问题。一些第三方的前端框架都有这种成熟的表格式数据处理。

    这些框架大致的原理就是封装了一些 js 监听表格中的每行的数据状态,比如脏数据它会自动识别等等,并且在数据提交时会把这些状态随着数据(数组列表等等形式)一起提交给后端的统一接口,然后每行再根据不同的状态交给不同的方法去处理。只需要加一个事务控制就行了。
    FieldFarmer
        4
    FieldFarmer  
       2021 年 8 月 21 日 via Android   1
    这个前后端数据格式取决于你用的前端框架是哪种,如果是自己封装的原生 table 的话,建议模仿我上一楼写的思路,要写一些 js 来监听表格数据的变动来记录每行的状态
    chanchan
        5
    chanchan  
       2021 年 8 月 21 日
    拿个数组装这些指令 /数据 /操作,后台成功消费就清空,失败的话客户端就消费这些,反向操作
    hronro
        6
    hronro  
       2021 年 8 月 21 日
    提供一个思路,还是以 Excel 表格为例:

    用户操作表格的时候,其实并不是直接在表格上操作,而是临时生成一个 Draft 表格,所有的操作都在 Draft 表格上完成,原表格不变。当用户提交保存的时候,验证 Draft 表格是否合法,合法的话就用 Draft 里的新数据替换掉原表格里的数据,然后删除这个临时的 Draft 表格,完毕。
    bthulu
        7
    bthulu  
       2021 年 8 月 21 日
    这还要怎么处理, 捞一个数据库连接, 关闭自动提交, 然后 增加就 insert, 修改就 update, 删除就 delete, 最后 commit.
    SystemLight
        8
    SystemLight  
    OP
       2021 年 8 月 21 日
    @FieldFarmer 是的目前的思路就是这样,给表格增加额外的状态字段,但是感觉处理起来不是很优雅,而且新增的状态列会对数据产生污染,感觉不是很好
    FieldFarmer
        9
    FieldFarmer  
       2021 年 8 月 21 日 via Android
    不需要在数据库加状态这个列,前端后端对应上即可,业务逻辑处理需要用到,用完就不管的,数据库最终不需要保存该字段
    FieldFarmer
        10
    FieldFarmer  
       2021 年 8 月 21 日 via Android
    @SystemLight 隐性加上啊,又不需要展示出来和存入数据库的
    FieldFarmer
        11
    FieldFarmer  
       2021 年 8 月 21 日 via Android
    @SystemLight 而且如果要考虑到多用户的话,还得加版本号字段
    akira
        12
    akira  
       2021 年 8 月 22 日
    这种设计用户用起来会不会很崩溃。。
    想想你弄了几个小时的 excel 表格,然后保存的时候 告诉你无法保存 数据直接清空
    XTTX
        13
    XTTX  
       2021 年 8 月 22 日
    我觉得这个场景就要用上 cache,React 的话 有 react-query, GraphQL client 也用 cache. 所有的前端操作都会自动存入 localstorage, react-query 可以实现 optimistic update(用户操作会立刻在前端显示结果,不需要等待后台的更新确认) 后台更新失败了,react-query 等成熟的 lib 都自带数据回滚
    kkkkkrua
        14
    kkkkkrua  
       2021 年 8 月 22 日
    当一条数据删除之后又插入的一条一摸一样的数据,如果你的数据允许这种重复数据,那么这条数据是属于新增还是不变
    theohateonion
        15
    theohateonion  
       2021 年 8 月 23 日
    在线表格这种产品从设计上来讲应该设计两套存储系统,前端需要使用浏览器存储去维持表格的编辑状态和结果,然后定时去向后端发起保存请求来持久化操作结果。后端应该不管前端操作是 CRUD 中的哪一项,只管存就好了,复杂的指令处理应该放到前端来做。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3955 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 39ms UTC 09:47 PVG 17:47 LAX 01:47 JFK 04:47
    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