V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SystemLight
V2EX  ›  Java

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

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

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

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