联系
Knight's Tale » 思考

关于业务系统视图数据不同步的问题

2014-10-31 12:44

我们在做业务系统时,经常会遇到 数据视图不同步的问题。尤其是hibernate,它帮你做视图时,这个问题尤为严重,因为你不知道什么时候读的是缓存,什么时候不是缓存。或者你需要了解它的缓存机制。

如果我们没有使用hibernate, 自己来做视图时,就要考虑到这些问题。

例如:

image

stateMachineMgr.handle 这句会对ad.getId()这个数据进行处理,此函数对于调用者来说是黑盒,它可能会对这个id相对应的数据进行修改。

dasInnerMgr.updateDas(ad) 这句是对ad实体进行处理。由于 stateMachineMgr.handle 可能对 ad 进行处理过,所以这里需要重新从数据库读取 ad = adDao.get(ad.getId());

如果不重新从数据库读取数据,而是使用旧ad进行处理,这里就出现了“视图”不一致问题。

虽然上面这种方式可以保证整个业务的完整性,但是对于调用来者来说不是那么 好用。

如果 stateMachineMgr.handledasInnerMgr.updateDas 关联性很高,则可以考虑 将 dasInnerMgr.updateDas 并入 stateMachineMgr.handle 中,免除调用者需要了解业务的调用问题。