我有时会遇到一个问题,即我从缓存中获取一个对象并需要更改它的某些属性,当我将对象放入缓存时,这些属性并不存在。
假设我有一个班级
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
会更改缓存中的对象,并且该值不再可预测。
这个例子似乎有点做作,因为有一些简单的方法可以避免这个问题。我处理的应用程序存在此问题,因为有时您处理的对象是从缓存中检索到的并不明显。
如果我使用不可变版本的Person
会避免这个问题吗?这是不可变性应该处理的用例吗?
应该用于不太可能频繁更改的对象。听起来你的大部分对象都保持不变,除了 HasNotifications?如果是这样,如果可能的话,我会考虑一种从缓存对象中删除此逻辑的方法。