0

在我的公司,我们正在重构一些应用程序,重构的一个方面是代表“用户对象”的数据类,也就是用户创建的对象,并且必须在本地保存。TDD,连续部署和持久性 - 如何降低它们?

我们正在努力实现持续部署工作流,例如应用程序应该在功能上不断增长,而已安装的基础应该会增加。

但是,由于每个正在序列化的类的设计是由它们如何支持用例来定义的,并且考虑到设计将随着特征被更好地理解和建模而改变,我们应该如何处理本地的客户端持久对象 - 从每个用户的角度来看,这些都是有价值的资产 - 最终设计“打破”了吗?

以下示例仅用于说明,因为问题可能会采用许多可能的形式,无论是属性类型的更改还是属性的添加/删除。下面的类有一个Platform属性,指出哪些平台给定的设备是兼容:

public class Device 
{ 
    public PlatformEnum CompatiblePlatform {get; set;} 
} 

所以,我们部署该系统的一些客户,这开始使用它,并坚持了很多Device情况下对他们的文件系统。

但最终需要/可能出现的情况为每个设备是兼容比一个Platform,因此类现在包含一个收集而不是为CompatiblePlatform单个值:

public class Device 
{ 
    public IEnumerable<PlatformEnum> CompatiblePlatforms {get; set;} 
} 

所以现在我们遇到了一个问题:如何处理大量的序列化文件,以便它们能够被新版本的设计自动加载?

而且,更广泛地说,我应该如何在基于用户故事的ATDD的“紧急设计”中尝试将“设计前沿”与可序列化类的设计融合在一起?我应该使用某种版本控制,还是应该采取一些众所周知的预防措施?

+2

这听起来与TDD或持续部署或您刚刚提到的任何其他术语无关。这是一个标准问题 - 如何从旧版本的平台迁移数据。 –

+0

@OliverCharlesworth我同意这一点。你觉得我怎么可以在SO中寻找那个,以更好地评估关闭与标记是否需要重复我自己的问题? – heltonbiker

回答

2

一种常用的方法是为每个序列化对象编写一个版本号,并演化反序列化代码以处理旧版本。例如在您的示例中,版本2 Device代码将读取版本1序列化的Device并将其作为单个条目加载到其枚举中的PlatformEnum