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

.NET可逆框架设计

 2012-06-25 07:26:47 来源:WEB开发网   
核心提示: /*** * author:深度训练 * blog:http://wangqingpei557.blog.51cto.com/ * **/ using System; using System.Collections.Generic; using

  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.Transactions;  
  9.  
  10. namespace ReversibleLib  
  11. {  
  12.   /// <summary>  
  13.   /// 可逆范围内的资源管理器。  
  14.   /// 可以使用该类对易失性资源进行事务范围内的管理。在事务操作范围内进行可逆操作。  
  15.   /// </summary>  
  16.   /// <typeparam name="T">需要管理的资源类型</typeparam>  
  17.   /// <typeparam name="Xcopy">资源在使用、恢复过程中的数据复制对象。</typeparam>  
  18.   public class ReResourceManager<T, Xcopy> : IEnlistmentNotification, IReversibleGetResourceData<T>  
  19.     where T : class, new()  
  20.     where Xcopy : class 
  21.   {  
  22.     /// <summary>  
  23.     /// 私有字段。资源的持久引用。  
  24.     /// </summary>  
  25.     T _commitfrontvalue;  
  26.     /// <summary>  
  27.     /// 私有字段。事务性操作数据对象。  
  28.     /// </summary>  
  29.     T _rollbackfrontvalue = new T();  
  30.     /// <summary>  
  31.     /// 保存数据复制对象。  
  32.     /// </summary>  
  33.     Xcopy _copy;  
  34.     /// <summary>  
  35.     /// 泛型约束需要,内部使用。  
  36.     /// </summary>  
  37.     public ReResourceManager() { }  
  38.     /// <summary>  
  39.     /// 资源管理器内部名称。便于追踪  
  40.     /// </summary>  
  41.     public string Name { get; set; }  
  42.     /// <summary>  
  43.     /// 重载默认构造函数,使用资源类型和数据复制对象初始化资源管理器。  
  44.     /// </summary>  
  45.     public ReResourceManager(T t, Xcopy icopy)  
  46.     {  
  47.       (icopy as IResourceCopy<T>).Copy(_rollbackfrontvalue, t);  
  48.       _commitfrontvalue = t;  
  49.       _copy = icopy;  
  50.     }  
  51.  
  52.     #region IEnlistmentNotification 成员  
  53.     public void Prepare(PreparingEnlistment preparingEnlistment)  
  54.     {  
  55.       preparingEnlistment.Prepared();  
  56.     }  
  57.     public void Commit(Enlistment enlistment)  
  58.     {  
  59.       enlistment.Done();  
  60.     }  
  61.     public void InDoubt(Enlistment enlistment)  
  62.     {  
  63.       enlistment.Done();  
  64.     }  
  65.     public void Rollback(Enlistment enlistment)  
  66.     {  
  67.       (_copy as IResourceCopy<T>).Copy(_commitfrontvalue, _rollbackfrontvalue);//回滚事务  
  68.       enlistment.Done();  
  69.     }  
  70.     #endregion  
  71.  
  72.     #region IReversibleGetResourceData<T> 成员  
  73.     T IReversibleGetResourceData<T>.GetPreviousData()  
  74.     {  
  75.       T result = new T();  
  76.       (_copy as IResourceCopy<T>).Copy(result, _rollbackfrontvalue);  
  77.       return result;  
  78.     }  
  79.     T IReversibleGetResourceData<T>.GetNextData()  
  80.     {  
  81.       T result = new T();  
  82.       (_copy as IResourceCopy<T>).Copy(result, _commitfrontvalue);  
  83.       return result;  
  84.     }  
  85.     #endregion  
  86.   }  
  87. }  

上一页  1 2 3 4  下一页

Tags:NET 可逆 框架

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