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



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

假设我有一个班级

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会更改缓存中的对象,并且该值不再可预测。

这个例子似乎有点做作,因为有一些简单的方法可以避免这个问题。我处理的应用程序存在此问题,因为有时您处理的对象是从缓存中检索到的并不明显。

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

缓存

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

最新更新