代替 @ken2k 建议的反射,您可以创建一组类来处理您的对象并在必要时合并缓存中的数据。为了尽量减少您需要的此类类的数量,我会让它们在您的数据对象将实现的接口上运行。
public interface IDataModelExample
{
string Name { get; set; }
string Value { get; set; }
string Extension { get; set; }
}
public class DataModelExampleMerger
{
public IDataModelExample Merge(IDataModelExample dme)
{
var cachedDme = LoadFromCache(); // This would require the key of course.
// I'll leave the implementation up to
// you.
if (string.IsNullOrEmpty(dme.Name))
{
dme.Name = cachedDme.Name;
}
// Repeat similar if-block for all properties.
return dme;
}
}
您需要为每个数据对象接口编写一个合并类,因此该解决方案将需要比基于反射的解决方案更多的代码。我不认为你可以绕过工作。这是一个权衡:运行时性能与整体编码时间。老实说,除非您的用户开始抱怨,否则我会对运行时性能造成影响,但这取决于您。
请记住,过早优化是万恶之源。