当前位置:  开发笔记 > 编程语言 > 正文

ASP.NET中的缓存模式

如何解决《ASP.NET中的缓存模式》经验,为你挑选了1个好方法。

所以我刚刚修改了一个我正在开发的框架中的bug.伪伪代码如下所示:

myoldObject = new MyObject { someValue = "old value" };
cache.Insert("myObjectKey", myoldObject);
myNewObject = cache.Get("myObjectKey");
myNewObject.someValue = "new value";
if(myObject.someValue != cache.Get("myObjectKey").someValue)
     myObject.SaveToDatabase();

所以,基本上,我从缓存中获取一个对象,然后将原始对象与缓存对象进行比较,以查看是否需要将其保存到数据库中以防它被更改.问题出现是因为原始对象是引用...所以更改someValue也会更改引用的缓存对象,因此它永远不会保存回数据库.我通过从缓存版本克隆对象来修复它,切断引用并允许我将新对象与缓存对象进行比较.

我的问题是:有没有更好的方法来做这个,一些模式,你可以推荐?我不可能是唯一一个这样做过的人:)



1> Mark Bracket..:

我认为,脏跟踪是处理这种情况的常用方法.就像是:

class MyObject {
  public string SomeValue { 
     get { return _someValue; }
     set { 
       if (value != SomeValue) {
          IsDirty = true;
          _someValue = value;
       }
  }

  public bool IsDirty {
     get;
     private set;
  }

  void SaveToDatabase() {
     base.SaveToDatabase(); 
     IsDirty = false;
  }
}

myoldObject = new MyObject { someValue = "old value" };
cache.Insert("myObjectKey", myoldObject);
myNewObject = cache.Get("myObjectKey");
myNewObject.someValue = "new value";
if(myNewObject.IsDirty)
   myNewObject.SaveToDatabase();

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有