不可变类型是否适用于此缓存问题

时间:2015-02-03 11:26:25

标签: c# asp.net-mvc caching immutability

我有时遇到一个问题,我从缓存中获取一个对象并需要更改它的一些属性,当我将对象放入缓存时它不存在。

让我说我有一个班级

public void class Person
{
    public string  FirstName { get; set; }
    public string  LastName { get; set; }
    public int Identifier { get; set; }
    public bool HasNotifications { get; set; }
}

FirstNameLastName存储在数据库中。当从数据库中提取对象时,它将被放入缓存中,其中HasNotifications为false。

Person对象可能在应用程序的多个部分中使用,HasNotifications将根据应用程序的部分设置为不同的值。

更改HasNotifications会更改缓存中的对象,并且该值不再可预测。

这个例子看起来有点令人满意,因为有一些简单的方法可以避免这个问题。我处理的应用程序存在问题,因为有时候从Cache中检索到你所使用的对象并不明显。

如果我使用Person的不可变版本可以避免这个问题吗?这是一个用例Immutability应该处理吗?

1 个答案:

答案 0 :(得分:0)

缓存应该用于不太可能经常更改的对象。除了HasNotifications之外,听起来你的大部分对象都保持不变?如果是这样,我会考虑从可能的情况下从缓存对象中删除此逻辑的方法。