Effective Java - 努力使失败保持原子性

2022-09-03  本文已影响0人  DZQANN

第76条 努力使失败保持原子性

  1. 通常来讲,调用方法失败了,应该使对象保持在被调用之前的状态

  2. 实现失败原子性的方法:

    • 设计一个不可变的对象。如果对象是不可变的,失败原子性就是显然的。如果一个操作失败了,它可能会阻止创建新的对象,但是永远也不会使已有的对象保持在不一致的状态之中

    • 在执行操作之前检查参数的有效性

      public Object pop() {
          if (size == 0)
              throw new EmptyStackException();
          Object result = elements[--size];
          elements[size] = null; // Eliminate obsolete reference
          return result;
      }
      
    • 对对象的临时副本执行操作,并在操作完成后用临时副本替换对象的内容

    • 编写一段恢复代码(recovery code),由它来拦截操作过程中发生的失败,以及使对象回滚到操作开始之前的状态。这种办法主要用于永久性的(基于磁盘的(disk-based))数据结构

思考

  1. 我们的代码中有很多是不规范的,他们会在一个transaction中构造出来Domain对象,然后直接通过判断Domain对象的状态查看参数是否合理,不合理的话直接rollback transaction。这种做法是依赖了事务的原子性,我个人是不喜欢这种做法的。个人倾向于使用vo这种对象提前进行判断,通过了判断再创建Domain对象
上一篇 下一篇

猜你喜欢

热点阅读