我有时遇到一个问题,我从缓存中获取一个对象并需要更改它的一些属性,当我将对象放入缓存时它不存在。
让我说我有一个班级
public void class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Identifier { get; set; }
public bool HasNotifications { get; set; }
}
FirstName
和LastName
存储在数据库中。当从数据库中提取对象时,它将被放入缓存中,其中HasNotifications为false。
Person对象可能在应用程序的多个部分中使用,HasNotifications
将根据应用程序的部分设置为不同的值。
更改HasNotifications
会更改缓存中的对象,并且该值不再可预测。
这个例子看起来有点令人满意,因为有一些简单的方法可以避免这个问题。我处理的应用程序存在问题,因为有时候从Cache中检索到你所使用的对象并不明显。
如果我使用Person
的不可变版本可以避免这个问题吗?这是一个用例Immutability应该处理吗?
答案 0 :(得分:0)
缓存应该用于不太可能经常更改的对象。除了HasNotifications之外,听起来你的大部分对象都保持不变?如果是这样,我会考虑从可能的情况下从缓存对象中删除此逻辑的方法。