想象一下下面的情况。Windows 服务会不时检查数据库表中的数据。当出现一些新数据时,它开始处理每个新行。
处理由几个逻辑阶段组成,假设为:
- 从网络服务中获取一些额外的数据;
- 通过来自阶段 1 的数据通过 Web 服务找到一个存在对象或创建一个新对象;
- 通知感兴趣的人已完成的操作(包含在第 2 阶段找到/创建的对象的详细信息);
- 做别的事。
就目前而言,如果发生任何异常,该服务会更新 DB 行并设置一个标志,指示发生了错误。一段时间后,服务将尝试再次处理该行......这就是问题所在。
处理将从一开始,从阶段 1 开始。在这种情况下,如果在阶段 4 发生异常并且它会一次又一次地发生,则将一次又一次地通知来自阶段 3 的感兴趣的人......
在发生异常的情况下完全停止行处理是不可能的,在我的情况下也是不可取的。理想情况下,如果有一种方法可以从上次失败的阶段开始处理,那就太好了。
现在我需要你的建议如何处理所有这些。事实上,一切都更加复杂,因为有几种处理模式,不同的阶段数等等。
提前致谢。
更新
是的,我在数据行中有 State 参数 :) 它只是暂时没有使用。异常处理对我来说并不是什么新鲜事。
问题是:处理状态切换的最佳方式是什么?换句话说,要在阶段编号和处理方法之间建立清晰的逻辑联系?执行流程可能非常不同,并且包括用于不同行的不同数量的阶段和方法。
我希望,有比为每个新情况编写无尽的 switch/case 块更令人愉快的方法吗?