我们在做业务系统时,经常会遇到 数据视图不同步的问题。尤其是hibernate,它帮你做视图时,这个问题尤为严重,因为你不知道什么时候读的是缓存,什么时候不是缓存。或者你需要了解它的缓存机制。
如果我们没有使用hibernate, 自己来做视图时,就要考虑到这些问题。
例如:
stateMachineMgr.handle
这句会对ad.getId()这个数据进行处理,此函数对于调用者来说是黑盒,它可能会对这个id相对应的数据进行修改。
dasInnerMgr.updateDas(ad)
这句是对ad实体进行处理。由于 stateMachineMgr.handle 可能对 ad 进行处理过,所以这里需要重新从数据库读取 ad = adDao.get(ad.getId());
如果不重新从数据库读取数据,而是使用旧ad进行处理,这里就出现了“视图”不一致问题。
虽然上面这种方式可以保证整个业务的完整性,但是对于调用来者来说不是那么 好用。
如果 stateMachineMgr.handle
和 dasInnerMgr.updateDas
关联性很高,则可以考虑 将 dasInnerMgr.updateDas
并入 stateMachineMgr.handle
中,免除调用者需要了解业务的调用问题。