WEB开发网
开发学院WEB开发ASP.NET .NET可逆框架设计 阅读

.NET可逆框架设计

 2012-06-25 07:26:47 来源:WEB开发网   
核心提示:3.示例这里我使用了一个简单的String Builder作为资源管理器需要管理的对象,请看代码: /*** * author:深度训练 * blog:http://wangqingpei557.blog.51cto.com/ * **/ using System;

3.示例

这里我使用了一个简单的String Builder作为资源管理器需要管理的对象。
请看代码:

  1. /***  
  2.  * author:深度训练  
  3.  * blog:http://wangqingpei557.blog.51cto.com/  
  4.  * **/ 
  5. using System;  
  6. using System.Collections.Generic;  
  7. using System.Text;  
  8. using System.Data;  
  9. using System.Transactions;  
  10. using ReversibleLib;  
  11.  
  12. namespace ConsoleApplication1  
  13. {  
  14.   class Program  
  15.   {  
  16.     static void Main(string[] args)  
  17.     {  
  18.       //构造数据  
  19.       StringBuilder strbuilder = new StringBuilder();  
  20.       strbuilder.Append("0");//初始数据为0  
  21.  
  22.       //资源管理器  
  23.       ReResourceManager<StringBuilder, StringBuilderCopy> strResource =  
  24.         new ReResourceManager<StringBuilder, StringBuilderCopy>(strbuilder, new StringBuilderCopy());  
  25.       strResource.Name = "0资源管理器";  
  26.       //开始进入可逆框架处理环境  
  27.       using (ReversibleManagerScope reversible = new ReversibleManagerScope(strResource))  
  28.       {  
  29.         try 
  30.         {  
  31.           ReversibleManager.Current.PreviousEvent += new ReversibleManager.PhaseHanlder(Current_PreviousEvent);  
  32.           ReversibleManager.Current.NextEvent += new ReversibleManager.PhaseHanlder(Current_NextEvent);  
  33.           strbuilder.Append("1");//首次修改数据为01  
  34.  
  35.           //获取下一步操作的数据  
  36.           StringBuilder strbuilder2 = (strResource as IReversibleGetResourceData<StringBuilder>).GetNextData();  
  37.           //构造下一步操作的自定义资源管理器  
  38.           ReResourceManager<StringBuilder, StringBuilderCopy> strResource2 =  
  39.             new ReResourceManager<StringBuilder, StringBuilderCopy>(strbuilder2, new StringBuilderCopy());  
  40.           strResource2.Name = "2资源管理器";  
  41.           ReversibleManager.Current.Next<ReResourceManager<StringBuilder, StringBuilderCopy>>(  
  42.             System.Transactions.IsolationLevel.Serializable, strResource2);  
  43.           strbuilder2.Append("2");//第二步修改数据为012  
  44.  
  45.           //返回上一步,也就是回滚对数据进行“2”设置的前一个状态  
  46.           StringBuilder strbuilder3;  
  47.           ReversibleManager.Current.Previous<StringBuilder>(out strbuilder3);//获取上一步使用的数据,这里应该是01  
  48.  
  49.           reversible.Completed();//提交所有操作  
  50.           Console.WriteLine(strbuilder3);  
  51.         }  
  52.         catch (Exception err)  
  53.         { Console.WriteLine(err.Message); ReversibleManager.Current.RollBack(); }  
  54.       }  
  55.       Console.ReadLine();  
  56.     }  
  57.  
  58.     static void Current_NextEvent(Transaction tran)  
  59.     {  
  60.       Console.WriteLine("下一步:" + tran.TransactionInformation.LocalIdentifier);  
  61.       Console.WriteLine("下一步:" + tran.TransactionInformation.DistributedIdentifier);  
  62.     }  
  63.     static void Current_PreviousEvent(Transaction tran)  
  64.     {  
  65.       Console.WriteLine("上一步:" + tran.TransactionInformation.LocalIdentifier);  
  66.       Console.WriteLine("上一步:" + tran.TransactionInformation.DistributedIdentifier);  
  67.     }  
  68.   }  
  69. }  
这里我使用0作为资源的初始数据,然后进入到第一个环节,我将它附加了1,然后进入到第二个环节,我将它附加了2,这里应该是012了,但是下面我突然又返回到了上一步,所以最后的数据应该是01。如果我们需要使用复杂的数据对象,如常用的Data Table类型,我们一般都是用它来展现一组数据,然后对这组数据进行一系列的操作。

上一页  1 2 3 4 

Tags:NET 可逆 框架

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接