本周工作思考
- 本周在小节排序上花费了较多的时间和精力,类似的排序我们之前有做过很多,思路也比较成熟,但是实际做下来,还是有一些比较特别的地方,小节排序实际上是整合了三种排序交互,1是拖拽排序,2是数字排序,3是步进式上下移动排序,在三种排序之上增加了章节的排序,使整个排序的复杂增加了一半。拖动排序是现有功能,但是和优化方向的差距比较大,基本上是对完全改变的了之前的实现思路,针对这个问题对拖拽的第三方模块做了修改适配,使之能够处理无placeholder,限制拖拽编译,章节进出交互的改变,在最初做这个优化的时候,没有想清楚完整的思路,只有一个大概的思路和场景假设,基于现有拖拽实现按照需求逐条优化,后来随着编码深入,发现这个思路太窄了,现有的拖拽对置顶和非置顶的区分提示,placeholder的适配都存在根本上的问题,另外还有一些不问题我认为是以前就存在的问题,这时我需要切换会线上代码验证是否是现有问题,并排查这类问题产生的原因;数字排序和上下移动排序 的实现是我想比较完整的,最初的想法是两这个是一个事,整个算法的实现大概用了一天时间,主要思路是使用show index和item index 做数组的变换,但是这种实现思路在遇到移入章节,移出章节时遇到了问题,因为章节没有数组上的界限,最章节内的一个,最后一个,最后一个章节,第一个章节都要额外判断,因为这些位置是不可见是逻辑位置,也就是说通过逻辑计算才能得出章节内的第一个元素上移要出章节,很明显这个算法存在一些逻辑覆盖的问题,另外一个比较完美的办法是把逻辑位置物理化,简单来说,把所有可以移动的位置显示的标识出来,这些位置和实际的元素映射,但是我又有点纠结这种实现过于复杂,因为要维护一个位置数组,维护一个元素数组,还要维护一个两者映射的管理器,实际上是一个完整的树排序算法,所以最终的实现是第一个思路,补充了异常情况的排序。