日历

November 2020
M T W T F S S
 1
2345678
9101112131415
16171819202122
23242526272829
30  

exception safety和command pattern

Home Forums 《冒号课堂》讨论区 exception safety和command pattern

Tagged: 

  • This topic is empty.
Viewing 1 reply thread
  • Author
    Posts
    • #1065
      Todd
      Member

      最近,我遇到了一些exception safety相关的问题,虽然,我使用的语言是C++,但我发现这个问题对Java和C#同样存在:在一个类方法的内部会陆续修改若干个外部对象以及自身的成员变量,如果在中间某个地方抛出异常,就需要把已经改变的状态恢复到一致性状态。有点儿类似于数据库里面的事务概念,但数据库的事务直接由数据库支持,程序员使用起来更简单。

      后来在网上查找了一些资料,一个实用的建议是:把所有可能抛出异常但无副作用的处理放在前面,把有副作用但不会抛异常的处理放在最后。这让我联想到command pattern:把核心的那个类方法重构为无副作用的,不是直接修改状态而是输出一系列的command;如果成功,再执行这些返回的command(假设执行command本身不会有异常)。

      这个例子里面,我体会到了command pattern以数据表达逻辑的好处,command pattern有点儿FP的味道!

    • #1226
      hui
      Keymaster

      命令模式是把行为封装为对象,作为数据来处理,的确有FP的味道。最大的区别是一个命令通常会产生副作用,不过如果适当地管理一组命令,可以利用备忘录模式在发生异常后进行undo操作,即尽量保证在有异常的情况下不产生副作用。

Viewing 1 reply thread
  • You must be logged in to reply to this topic.
 请您评分1星(很差)2星(不行)3星(一般)4星(不错)5星(很棒)