有什么好的设计可以允许文件类型在不同版本的软件之间向后兼容?
例如,Microsoft如何将Word 2007、2010和2013等信息获取到所有打开的docx文件,但是不同版本可以保存更多/更少的数据,并以略有不同的方式保存数据,所有数据都保存到相同的文件类型,并且保存在一个版本中的文件可以在另一个版本中打开,但是文件的某些元素可能在较早版本中不可用?
我的意思是,最明显的方法是
private string openfile(string filename)
{
File.Open(filename)
... some logic that gets a header from the file that will never change
switch (fileversion)
case 2007:
.....
case 2010
.....
case 2013
.....
}
但这似乎是令人难以置信的整体,不是很可扩展,并且可能导致大量复制/粘贴代码。
因此,我正在考虑对所有版本使用基本接口,该接口定义文件中需要存在的不变结构(例如标头)和需要用于序列化/反序列化的方法,然后进行多次继承,以便每个实现该接口的新版本的类继承了旧版本,并且仅覆盖已更改的内容,因为该文件在大多数情况下都是相同的。
我并没有真正为文件的结构而烦恼,因为它已经决定我们将使用XML,并且基本上已经确定了初始模式。但是,毫无疑问,将来会对其进行更改,我只希望能够以一种易于适应这些更改的方式来设计代码。