1
sutra 2021-08-21 13:59:53 +08:00
这个问题问的是哪个领域的?修改文件?修改关系型数据库?
|
2
SystemLight OP @sutra 前端和后端应该传输什么样的数据格式,才能利于后端分析出前端此次做了哪些操作,或者应该用怎样的方式得出前端此次操作内容,然后放到一个事务中处理
|
3
FieldFarmer 2021-08-21 14:59:57 +08:00 via Android
我记得以前碰到过这种问题。一些第三方的前端框架都有这种成熟的表格式数据处理。
这些框架大致的原理就是封装了一些 js 监听表格中的每行的数据状态,比如脏数据它会自动识别等等,并且在数据提交时会把这些状态随着数据(数组列表等等形式)一起提交给后端的统一接口,然后每行再根据不同的状态交给不同的方法去处理。只需要加一个事务控制就行了。 |
4
FieldFarmer 2021-08-21 15:08:26 +08:00 via Android 1
这个前后端数据格式取决于你用的前端框架是哪种,如果是自己封装的原生 table 的话,建议模仿我上一楼写的思路,要写一些 js 来监听表格数据的变动来记录每行的状态
|
5
chanchan 2021-08-21 15:22:48 +08:00
拿个数组装这些指令 /数据 /操作,后台成功消费就清空,失败的话客户端就消费这些,反向操作
|
6
hronro 2021-08-21 15:26:47 +08:00
提供一个思路,还是以 Excel 表格为例:
用户操作表格的时候,其实并不是直接在表格上操作,而是临时生成一个 Draft 表格,所有的操作都在 Draft 表格上完成,原表格不变。当用户提交保存的时候,验证 Draft 表格是否合法,合法的话就用 Draft 里的新数据替换掉原表格里的数据,然后删除这个临时的 Draft 表格,完毕。 |
7
bthulu 2021-08-21 15:33:41 +08:00
这还要怎么处理, 捞一个数据库连接, 关闭自动提交, 然后 增加就 insert, 修改就 update, 删除就 delete, 最后 commit.
|
8
SystemLight OP @FieldFarmer 是的目前的思路就是这样,给表格增加额外的状态字段,但是感觉处理起来不是很优雅,而且新增的状态列会对数据产生污染,感觉不是很好
|
9
FieldFarmer 2021-08-21 16:24:43 +08:00 via Android
不需要在数据库加状态这个列,前端后端对应上即可,业务逻辑处理需要用到,用完就不管的,数据库最终不需要保存该字段
|
10
FieldFarmer 2021-08-21 16:26:06 +08:00 via Android
@SystemLight 隐性加上啊,又不需要展示出来和存入数据库的
|
11
FieldFarmer 2021-08-21 16:27:07 +08:00 via Android
@SystemLight 而且如果要考虑到多用户的话,还得加版本号字段
|
12
akira 2021-08-22 01:06:23 +08:00
这种设计用户用起来会不会很崩溃。。
想想你弄了几个小时的 excel 表格,然后保存的时候 告诉你无法保存 数据直接清空 |
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 都自带数据回滚
|
14
kkkkkrua 2021-08-22 16:24:26 +08:00
当一条数据删除之后又插入的一条一摸一样的数据,如果你的数据允许这种重复数据,那么这条数据是属于新增还是不变
|
15
theohateonion 2021-08-23 10:11:39 +08:00
在线表格这种产品从设计上来讲应该设计两套存储系统,前端需要使用浏览器存储去维持表格的编辑状态和结果,然后定时去向后端发起保存请求来持久化操作结果。后端应该不管前端操作是 CRUD 中的哪一项,只管存就好了,复杂的指令处理应该放到前端来做。
|