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

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

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

用户操作表格的时候,其实并不是直接在表格上操作,而是临时生成一个 Draft 表格,所有的操作都在 Draft 表格上完成,原表格不变。当用户提交保存的时候,验证 Draft 表格是否合法,合法的话就用 Draft 里的新数据替换掉原表格里的数据,然后删除这个临时的 Draft 表格,完毕。
bthulu
2021-08-21 15:33:41 +08:00
这还要怎么处理, 捞一个数据库连接, 关闭自动提交, 然后 增加就 insert, 修改就 update, 删除就 delete, 最后 commit.
SystemLight
2021-08-21 16:20:11 +08:00
@FieldFarmer 是的目前的思路就是这样,给表格增加额外的状态字段,但是感觉处理起来不是很优雅,而且新增的状态列会对数据产生污染,感觉不是很好
FieldFarmer
2021-08-21 16:24:43 +08:00
不需要在数据库加状态这个列,前端后端对应上即可,业务逻辑处理需要用到,用完就不管的,数据库最终不需要保存该字段
FieldFarmer
2021-08-21 16:26:06 +08:00
@SystemLight 隐性加上啊,又不需要展示出来和存入数据库的
FieldFarmer
2021-08-21 16:27:07 +08:00
@SystemLight 而且如果要考虑到多用户的话,还得加版本号字段
akira
2021-08-22 01:06:23 +08:00
这种设计用户用起来会不会很崩溃。。
想想你弄了几个小时的 excel 表格,然后保存的时候 告诉你无法保存 数据直接清空
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
2021-08-22 16:24:26 +08:00
当一条数据删除之后又插入的一条一摸一样的数据,如果你的数据允许这种重复数据,那么这条数据是属于新增还是不变
theohateonion
2021-08-23 10:11:39 +08:00
在线表格这种产品从设计上来讲应该设计两套存储系统,前端需要使用浏览器存储去维持表格的编辑状态和结果,然后定时去向后端发起保存请求来持久化操作结果。后端应该不管前端操作是 CRUD 中的哪一项,只管存就好了,复杂的指令处理应该放到前端来做。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/797170

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX