bubbletea

 

C#对象级版本控制(1)

只是个想法而已,做了如下试验,说明如下:

1。C#所有类型都继承自object类型,所以只要实现对object的版本控制就能保证对其他类型同样具有这种能力。

2。采用.net的反射机制可以得到运行时具体对象的类型信息,包括所有字段和方法。Diffinfo类以字段为最小单位记录某一对象不同版本间的差异。

3。VersionController类包含一个HeadVersion类型的对象和一个BranchVersion类型的对象集合。Head版本的对象及其信息被存储在HeadVersion中,用户可以决定在任意时刻从当前的Head版本开辟一个分支,该分支被加入到BranchVersion的对象集合中。HeadVersion和BranchVersion都继承自CommonVerision。

4。用户通过VersionController实现对当前版本对象或某一分支对象的操作(对于分支需指定其分支name)每次决定step version时,HeadVersion或BranchVersion对版本号自增,并将差异信息存储在一个DiffInfo类型的对象集合中。HeadVersion和BranchVersion都保留一个被创建时的original对象版本,这里的差异信息是以这个版本为参照系。

5。通过VersionController还可以建立tag标记,即为HeadVersion或BranchVersion的CurrVersion拍一张快照,并指定一个名称存储在一个tagList中,当然tag也可以从tagList中删除。通过VersionController还可以查询版本信息。

VersionController.jpg
存在问题示例:

 1public class A
 2{
 3    public B = new B();
 4    public int t1 = 3;
 5    public string t2 = "t2";
 6}

 7
 8class B
 9{
10    public int t3 = 5;
11    public string t4 = "t4";
12    public float t5 = 5f;
13}
当对类型A的对象进行版本控制时,由于B类型的对象所占的字节数大于A的50%以上,所以当诸如B.t3之类的对象发生更新时整个B类型对象都要被保存一个副本,这显然是不合适的,我的解决方案是引入ignore字段,对诸如B这种类型的对象忽略其值的更新,并对B本身添加一个版本控制。

posted on 2006-01-21 20:32 Roger的Blog 阅读(771) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿(1)

随笔档案(13)

搜索

最新评论

阅读排行榜

评论排行榜