V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhangbohun
V2EX  ›  程序员

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

  •  
  •   zhangbohun · 2015-12-03 00:15:23 +08:00 · 1842 次点击
    这是一个创建于 3278 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    对了,这里的 b 不是一个简单的可以提前缓存的数据,而是类似于一系列文件删改或者数据库处理这种情况,而 a 则是可以重复处理的数据。

    3 条回复    2015-12-03 13:04:59 +08:00
    hrong
        1
    hrong  
       2015-12-03 09:04:13 +08:00
    感觉楼主说得如啰嗦。无非就是要不要涉及到数据库的情况了。

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

    如果涉及数据库操作,还是要用事务吧。更复杂一点。
    zhangbohun
        2
    zhangbohun  
    OP
       2015-12-03 11:42:39 +08:00
    @hrong 主要不是数据库操作,就是想说 b 是个不能简单保存原先状态的东西,不一定是数据库,也可能是多次新建删除文件或者发送接受数据的事
    kanezeng
        3
    kanezeng  
       2015-12-03 13:04:59 +08:00
    嗯,单说这种模式,为什么不在对 a 进行处理和判断的时候,把后面需要用到的数据存下来呢?这样后面就不用再重复处理了啊?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2880 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 14:17 · PVG 22:17 · LAX 06:17 · JFK 09:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.