9

저는 응용 프로그램의 주 코드에서 하위 호환성을 유지하는 데 필요한 모든 극한 논리를 분리하는 전략에 관심이 많습니다. 다른 말로하면, 작업을 위해 별도로 격리 된 소스 파일을 제외하고는 하위 호환성 문제가없는 것처럼 코드를 보게되는 전략에 가깝게 다가 갈 수 있습니다.주 코드와의 하위 호환성을 위해 코드를 어떻게 분리합니까?

예를 들어, 응용 프로그램이 하나의 거대한 파일 찾기 기능 대신 하나의 특정 파일 형식을 읽는 경우 코드에서 먼저 "quirks"항목/객체 목록을 반복하여 볼 수 있습니다. 만약 그것이 파일이라면, 그것은 적용될 것이고, 그렇다면 일반적인 경우 로직 대신에 자신의 파싱 로직을 호출 할 것이다.

Quirks는 괜찮은 전략이지만 앱의 모든 적절한 위치에서 단점 확인을 위해 작업해야하며, 수표의 모양은 각기 다른 quirk 유형 등에 따라 다릅니다. 마찬가지로이 작업을 위해 상용구 전용 라이브러리가 있어야합니다. 또 다른 문제는 응용 프로그램의 임의의 덩어리에 범용 목적으로 악용되지 않는다는 것을 강요하는 법입니다.

답변

10

내 일반적인 전략은 이전 버전과의 호환성 입력을 새 구현 입력으로 변환 한 다음이 변환 된 데이터로 새 구현 코드를 사용하는 별도의 방법을 사용하는 것입니다.

+2

+1 : 대개 내 방식이기도합니다. 일반적으로 간단한 래퍼 (코드 용)와 형식 변환기 (데이터 용)만으로도 적절한 호환성 계층을 만들 수 있습니다. –

+1

아마도 가장 깨끗한 전략 일 것입니다. 거대한 데이터가 있으면 힘들 것입니다. 그렇다면 실제 변환을 수행하는 대신 어댑터보기를 구현하고 C++과 같은 리플렉션없이 언어로 고통스럽게 만들 수 있다고 생각합니다. –

0

이것은 상기 역 호환성 피처가 퇴직 할 때까지의 시간 프레임에 의존 할 것이다. 2 개월 후에 더 이상 그 버크를 가질 필요가없는 다른 버전의 소프트웨어를 출시 할 것이라는 확신이들 것입니다. 실제로 제거 할만큼 충분히 훈련을 받았다면 이전 코드를 계속 사용할 수 있습니다 다음 개발주기에 모든 걸림돌. 두 곳의 별도의 백엔드 서버 구성 요소를 유지 관리 할 예정이며 동시에 업그레이드 할 수는 없지만 일반적으로 서로 2 주 내에있을 수 있습니다. 즉, 이전 버전과의 호환성을 위해 이전 버전과의 통신을 위해서는 이전 버전과의 호환성이 필요하지만 각 버전에서는 이전 버전과의 호환성을 이유로 이전 버전을 제거 할 수 있습니다.

그러나 호환성 레이어는 오랫동안 또는 무기한으로 남아 있습니다 (Word의 이진 파일 형식을 생각해보십시오). 새 기능과 이전 기능이 동일한 방식으로 코드를 리팩터링하려고합니다. 그것에있는 기간. 나는 오래된 형식 (또는 행동)과 새로운 형식 모두 시스템의 요구 사항 중 일부라고 생각한다. 오래된 형식이 두 번째 클래스 시민이 될 이유는 없다.

관련 문제