目前,我们有一个带有属性的类型,用来表示在将数据持久化到磁盘之前必须加密哪些属性。我们使用反射来查看用ConfidentialAttribute修饰的属性,加密值,然后序列化。在反序列化时,我们解密ConfidentialAttribute修饰的属性。下面是该类型的一个简化示例。
class MyObject_V1
{
[Confidential]
public string StringData
{
get;
set;
}
}我们正在做一些重构/清理,并计划摆脱ConfidentialAttribute,并使用类似于下面的东西。
class MyObject_V2
{
public ConfidentialString StringData
{
get;
set;
}
}
class ConfidentialString
{
[OnSerializing]
public void Serialize(StreamingContext context)
{
//Encrypt value...
}
[OnDeserialized]
public void Deserialized(StreamingContext context)
{
//Decrypt value...
}
public string Value
{
get;
set;
}
}我们需要在升级过程中维护配置数据。我的问题是,将持久存储到磁盘的MyObject_V1的配置迁移到持久存储到磁盘的MyObject_V2的最佳实践是什么。我正在考虑的一些选择是让两个类并存,或者让两个属性并存,并在第一次访问对象时使用一些逻辑来执行迁移。
谢谢你的帮助。
发布于 2016-03-30 15:11:24
发布于 2014-11-04 09:55:36
如果我没弄错你的要求,那应该很容易。如此简单,你将不需要做任何事情!
当序列化为MyObject_V2时,MyObject_V1应该产生完全相同的输出。因此,在更改之前序列化的MyObject_V1应该反序列化为MyObject_V2,而不做任何修改。您只需要正确地实现Serialize和Deserialize方法。
此外,这是最好的实践:保持完全的向后兼容性,并使您的重构只影响实现的尾巴。如果您可以在重构代码的同时保持配置文件不变,请这样做。
总而言之:迁移数据的最好方法就是根本不必迁移它!
https://stackoverflow.com/questions/26724270
复制相似问题