一个对于这种情况的写代码的模式

2015-12-03 00:15:23 +08:00
 zhangbohun
代码写着写着发现了一个好用的模式:(其实算是很简单的一个小经验吧)
如果你遇到个这样的情况:需要对 a 进行一系列处理和判断,并且同步的用 a 处理过程中的数据处理 b ,还要是如果 a 在某一步处理后的结果不符合条件时就要放弃对 b 的处理(让 b 恢复原样)
然后,你就可以这样做,
你可以先写只对 a 进行处理和判断而不同时对 b 进行处理,把不符合条件的 a 的情况都提前 return 掉,之后再写对 b 的具体处理。当然,由于处理 b 还是要用 a 处理过程中的数据,所以对 a 还要再重复处理一遍。

这样虽然有部分代码(处理)是重复的,但是可以预先把 a 可能不符合的情况都过滤掉,在后面处理 b 的时候就不会因为在 a 某一步处理后的结果不符合条件而又要把 b 进行“回滚”处理了。

对了,这里的 b 不是一个简单的可以提前缓存的数据,而是类似于一系列文件删改或者数据库处理这种情况,而 a 则是可以重复处理的数据。
1857 次点击
所在节点    程序员
3 条回复
hrong
2015-12-03 09:04:13 +08:00
感觉楼主说得如啰嗦。无非就是要不要涉及到数据库的情况了。

如果不涉及数据库操作,数据完整整约束就在你程序内控制,这个最好办了,你用多线程(或多线程的框架)来保持协同是最好不过的,不用像在帖子里说得那么复杂吧。

如果涉及数据库操作,还是要用事务吧。更复杂一点。
zhangbohun
2015-12-03 11:42:39 +08:00
@hrong 主要不是数据库操作,就是想说 b 是个不能简单保存原先状态的东西,不一定是数据库,也可能是多次新建删除文件或者发送接受数据的事
kanezeng
2015-12-03 13:04:59 +08:00
嗯,单说这种模式,为什么不在对 a 进行处理和判断的时候,把后面需要用到的数据存下来呢?这样后面就不用再重复处理了啊?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/240727

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX