서로 다른 버전의 소프트웨어간에 파일 형식의 이전 버전과의 호환성을 허용하는 좋은 디자인은 무엇입니까?
예를 들어, Microsoft가 열린 모든 docx 파일에 워드 2007, 2010 및 2013 등을 어떻게 제공합니까? 그러나 다른 버전의 데이터는 더 많거나 적은 데이터를 저장하고 데이터를 약간 다른 방식으로 동일한 파일 형식으로 저장할 수 있습니다. 한 버전으로 저장된 파일을 다른 버전에서 열 수 있지만 파일의 특정 요소를 이전 버전에서 사용하지 못할 수 있습니까?
정말 확실한 방법은
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의 사용 여부를 이미 결정했으며 초기 스키마는 이미 결정되었으므로 파일 구조에 대해서는 실제로 신경 쓰지 않았습니다. 그러나 앞으로도 변경이있을 것이므로 이러한 변경 사항을 쉽게 수용 할 수있는 방식으로 코드를 디자인 할 수 있기를 바랍니다.