目标:
大家可以设想这样一个情景,公司已经部署信息化,且很多办公流程已经挪到线上正在运营的系统来解决,这带给企业的员工非常大的便利,节省办公时间,提高办公效率,可是我们把所有的流程和数据都放到了公司服务器,一旦离开了公司,我们就相当于和我们所有的办公环境脱离了,不再可以查看公司系统上的运营数据,不再可以进行添加删除等等一系列操作。如果你最近的工作非常的多,你在有限的正常办公时间内不能完成,那怎么办,只有在办公室奋战,叫苦不迭的夜晚办公室生活就开始了.
离线应用生来就是为了解决这样的问题,针对上面所列举的情况,你不需要在办公室进行奋战,你要做的只有
1.将线上系统某个列表(或存储结构)的数据按需选择同步到本地
2.回到家,利用闲暇时间,打开离线应用,对数据进行操作
3.第二天回到公司,同步数据到公司服务器
说了这么多,我们的目的只有一个:实现离线办公
实现方案:
我们将整个离线应用分为两块
1.业务数据同步到本地
2.本地提交到业务系统
对于中间支持用户怎么去操作数据,不是我们这里讨论的重点,这也是随业务逻辑而变的,一般都会在功能上做成和线上的系统一样
1.业务数据同步到本地
将云上的业务上的数据按需同步到本地并不是什么难的操作,但是这里也不容小觑
技术实现要点:
- 能够按需选择数据同步到本地,为了让用户不用花大量的时间在等待同步数据到本地,我们可以采用由用户选择数据的同步 机制,有选择的将真正对用户有用的数据同步到本地,当然我们在代码逻辑中,还需要记住用户的这些选择,并持久化,为用户回到公司进行数据提交提供处理基础
- 离线客户端数据暂存器能够实现数据的持久化
业务数据同步到本地除了上面涉及到的,实际上我们还必须解决差异同步问题
虽然我们在同步业务数据到本地的时候,用户可以按需进行选择,但是如果用户当前选择的数据,有若干数据已经在本地有副本了,这些应该怎么处理呢?差异同步的实现不知道大家有没有比较好的方案,我这里提供一点拙见
- 最笨的方法就是遍历然后依次判断个属性是否相等,若发现在本地有副本,则跳到下一个业务数据条目,继续运行,
- 使用version法,给每个业务数据条目都加上一个version,对业务数据条目的任何更改都会引起version++,这样我们就可以通过判断version来确定,而且我们可以使用截获事件的手段来避免version给我们带来业务逻辑上的任何变化
2.提交数据到业务系统
这里主要是员工回到公司后,系统对员工已经在线下所作的更改提交到业务系统,产生效果
技术实现要点:
-
找到那些已经被更改的数据,我们这里拟采用“已更改数据”存储模块来标识用户已经做了更改的数据条目,这样可以获得更快的速度,我们可以在最短的时间找到哪些数据做了更改
-
提交到服务器,在服务器上找到那些已更改的数据条目,应用用户最新的处理结果,若在用户离线之后,别的用户对线上的数据做了一些修改,我们应该怎么处理呢?我们现在暂定的一个原则就是以用户最后更改为最新数据,当然,这方面确实会有一点点不妥,不知道大家有没有什么比较好的方案。