背景
对于增删改查这些操作,现代框架已经提供了比较好的实现。
在这基础上往往有一些扩展需求。
比如说批量的增删改查。
对于玩具代码来说,实现并不复杂。
但在工程上的代码,还是需要考虑下多种情况。
可能需要考虑的问题
- 批量的数据,如何传入web层?
- 批量的数据,如何效验数据有效性?
- 需要与单个操作保持效验的一致性
- 如何返回批量数据操作的状态?
- 批量操作中部分操作,成功了,部分失败了,如何处理?
- 增加插入时,已经有存在的数据了
- 删除时,查找时,修改时,该数据不存在
自己对上面问题的实践
- web层传入问题
- 页面提交的情况: 一般是
checkbox
列表。接收端一个String []
就可以解决。 - 非页面,用key-value方式,可以选取分隔符传入的数组放入一个key中,如http://example.com/del?name=a,b,c。适用于参数简单,查询或者删除。
- 非页面,用json格式来post。合适复杂对象,需要插入数据等,直接可以序列化成传输对象,比简单易用。如:
- 页面提交的情况: 一般是
[
{
"x":1,
"y":2
},
{
"x":3,
"y":4
}
]
- 数据效验问题
- 因为需要保持与单个操作一致的检查,需要循环调用效验单个数据的过程。但如果效验过程有些提示信息。单个的提示信息只包含单个的信息,但在批量的操作中,需要指明哪一个数据单元有问题,需要在提示信息中包含下标信息,于是需要改写单元效验代码。
- 返回批量数据操作的状态
- 这里有两种情况,一种中,按单元的结果,返回操作结果的数组。第二种是检查若有一个数据单元效验失败,则返回失败。所有的操作成功,才返回成功。
- 批量操作中部分操作,成功了,部分失败了,如何处理。
- 实际中是检查完全,只有保证所有的数据都能执行成功,再执行。或者在批量的处理中,做一个数据库的事务,若有失败,则回滚。