事务存储
事务有了统一的规范和编码,下一步就需要考虑具体该怎样存储一个事务了。首先,一个操作有它的唯一编码,通过String类型来存储ID编码值。其次需要存储的就是参数列表,因为每一个操作所需要的参数时不同的,所以考虑用List<String>是首选方案。
具体代码实现:
/// <summary>
/// 存储一次操作过程的所有方法编号和方法的参数列表
/// </summary>
[Serializable()]
public class TransactionEntity
{
public TransactionEntity()
{
TransactionID = new List<String>();
TransactionParam = new List<object[]>();
Success = new List<bool>();
}
/// <summary>
/// 清空内部的信息
/// </summary>
public void Clear()
{
TransactionID.Clear();
TransactionParam.Clear();
Success.Clear();
}
//每一个方法编号,相当于hashtable里面的KEY
private List<String> m_TransactionID;
public List<String> TransactionID
{
get;
set;
}
//对应方法编号的参数列表,相当于hashtable里面的value
private List<object[]> m_TransactionParam;
public List<object[]> TransactionParam
{
get;
set;
}
//对应方法是否执行成功
private List<Boolean> m_Success;
public List<Boolean> Success
{
get;
set;
}
}
一个事务的结构实体类
一个事务实体的结构图
一个事务里面包含了很多原子操作,每个原子操作对应自己的参数列表。而且在每一个原子操作后面都有一个是否成功的表示。当一个事务执行完毕后,程序会自动执行检查其是否每个操作都成功了,如果没有成功,那么整个操作将回退,事务执行结束。