버전 관리 문제를 처리하는 방법은 많이 있습니다. 버전 당 하나의로드 기능을 사용하여 수행 할 수 있고, 시간이 지남에 따라 자산 구조의 변환을 (일반적으로 속성을 통해) 설명하여 프로세스를 자동화하려고 시도 할 수 있습니다.로드 / 저장 기능 내에서 버전 별 검사를 수행 할 수 있습니다. .
같은 I 접근 "변경 사항을 설명"하지만 속성을 통해 일을하려고하는 것은 어색 얻을 것을 발견 빨리 . 대신 함수를 사용하겠습니다. 버전의 N
데이터 N + 1
를 모든 적절한 버전의 버전의 데이터로 변환하는 기능을 구현 하십시오. 로드시 최신 버전과 비교하여 버전을 확인하고 그렇지 않은 경우 적절한 버전 관리 기능을 통해 데이터를 실행하십시오. 항상 최신 버전을 저장하십시오.
데이터가 여전히 런타임 키-값 형식 일 때 변환을 수행 할 때 가장 효과적입니다. 즉, 고유 한 이진 형식이있는 경우 기본 키-값 형식의 JSON 또는 XML을 사용할 수 없기 때문에 "런타임 속성 모음"접근 방식 인 데이터에 대한 표현을 구현하려고합니다. 이 작업을 수행하지 않으면 오래된 클래스 정의를 유지해야 할 수도 있습니다. 이 속성을 나쁜 형식으로 자산을 가질 수 있다는 것도 게임 에디터 개발에 매우 유용합니다.
개발하는 동안 데이터를 반복 할 때 자연스럽게 최신 버전으로 버블 링되어 결국 이전 버전 관리 기능을 삭제할 수 있습니다. 이것은 Guild Wars 2에서 아트 자산 (예 :지도)의 버전을 지정하는 데 사용했던 것과 동일한 수준의 접근 방식입니다.
이제는 자산에 대한 텍스트 및 이진 직렬화를 모두 지원하는 것이 유용하다고 생각합니다. 개발 중에는 모든 데이터를 XML 또는 JSON을 기반으로 사람이 읽을 수있는 형식으로 유지하십시오. 이렇게하면 데이터 편집과 관련하여 복잡한 도구를 만들 필요가 없으므로 반복 능력이 크게 향상 될 수 있습니다. 손으로 간단하고 빠르게 조정할 수있는 상태로 돌아갈 수 있습니다.
둘째, 파일 크기 나 파일 IO 시간을 향상시킬 수있는 게임 배송을위한 바이너리 형식을 원한다고 가정 할 때 버전 관리를 위해 직렬화 및 역 직렬화 API를 설계하십시오. 어느 시점에서 업데이트 또는 버그 수정을 제공 할 수 있기 때문에 버전 지정 은 여전히 운송 컨텍스트에서 유용합니다. .NET 직렬화 및 Boost 직렬화 의 버전 관리 기능에 대해 설명하는 문서 가 있습니다. 당신이하면 되는 텍스트와 바이너리 포맷을 모두 지원하는 것, 당신이 (또는 빌드 자동화 된 테스트가 더 나은, 이렇게하는) 때때로을 테스트해야합니다.