想象一下WebForms应用程序,其中有一个名为CreateAll()的主方法.我可以一步一步地描述方法任务的过程如下:
1)存储到数据库(更新/创建Db项目3-4次)
2)启动一个新线程
3)Result1 =调用soap服务,并使用超时阈值检查状态和x分钟后.它继续(状态现在正常,这并不意味着失败)
4)存储到数据库(更新/创建Db项目3-4次)
5)result2 =呼叫肥皂服务(以火灾和忘记的方式)
6)更新配置文件(实际上从result1获取)
7)通过使用回调请求,它检查前端的每x秒结果2的状态,UI显示进度条.如果过程结束(100%)则表示成功
我正在考虑所有这些都是可以按类型分组的任务.基本上,几种类型的操作是:
我想为现有实现添加回滚/重试机制,并使用面向任务的体系结构并重构现有的遗留代码.
我发现C#中的Memento Design Pattern或Command Pattern之类的东西可以帮助达到这个目的.我还发现msdn Retry Pattern描述很有趣.我真的不知道,我希望有人带领我做出最安全和最好的决定......
您是否可以建议我保留现有实现和流程的最佳方法,但将其包装在一般的抽象重试/回滚/任务列表实现中?
最终的实现必须能够在每种情况下重试(无论任何任务或一般故障,例如整个createAll流程中的超时等),并且还会有一个回滚决策列表,其中应用程序必须能够回滚已完成的所有任务.
我想要一些例子来打破这个耦合代码.
PseudoCode可能有用:
class something
{
static result CreateAll(object1 obj1, object2 obj2 ...)
{
//Save to database obj1
//...
//Update to database obj1
//
//NEW THREAD
//Start a new thread with obj1, obj2 ...CreateAll
//...
}
void CreateAllAsync()
{
//Type1 Save to database obj1
//...
//Type1 Update to database obj2
//Type2 Call …Run Code Online (Sandbox Code Playgroud)