동일한 방식으로 두 가지 버전의 데이터를 읽고 작업해야하는 응용 프로그램을 작성할 때 해당 데이터를 나타내도록 클래스를 구성하는 가장 좋은 방법은 무엇입니까? 나는 세 가지 시나리오와 함께 올라와있다 : 다른 버전의 데이터를 저장하는 가장 좋은 방법은 무엇입니까?
- 공통 기본/특정 어린이
- 고유 구조
버전 1 차 예
byte DoorCount
int Color
byte HasMoonroof
byte HasSpoiler
float EngineSize
byte CylinderCount
버전 2 자동차를
byte DoorCount
int Color
enum:int MoonRoofType
enum:int TrunkAccessories
enum:int EngineType
공통 기본/특정 어린이이 방법
는 데이터의 두 가지 버전과 데이터의 각 버전에 대한 자식 클래스에 공통 분야의 기본 클래스가있다.
class Car {
byte DoorCount;
int Color;
}
class CarVersion1 : Car {
byte HasMoonroof;
byte HasSpoiler;
float EngineSize;
byte CylinderCount;
}
class CarVersion2 : Car {
int MoonRoofType;
int TrunkAccessories;
int EngineType;
}
강점
- OOP 패러다임
약점
- 새 버전이 공통 필드를 제거가 유출되는 경우 자식 클래스를 기존의 것은 변경해야합니다
- 하나의 conc에 대한 데이터 eptual 단위는 두 개의 정의 사이에서 분리됩니다. 다음은 데이터 연합
은 렌트카는 데이터의 모든 버전에서 자동차 분야의 결합으로 정의된다.
class Car {
CarVersion version;
byte DoorCount;
int Color;
int MoonRoofType; //boolean if Version 1
int TrunkAccessories; //boolean if Version 1
int EngineType; //CylinderCount if Version 1
float EngineSize; //Not used if Version2
}
강점
는- 음 ... 모든 것이 한 곳입니다.
약점
- 경우 강제 구동 코드.
- 다른 버전이 릴리스되거나 기존 버전이 제거되면 유지 관리가 어려움.
- 개념화가 어렵습니다. 필드의 의미는 버전에 따라 변경되었습니다.
고유 구조
여기서 구조는 서로 OOP에는 관계가 없다.그러나 코드가 동일한 방식으로 코드를 처리 할 것으로 예상되는 경우 인터페이스가 두 클래스 모두에 의해 구현 될 수 있습니다. 새 버전이 추가되거나 기존이 제거되면
class CarVersion1 {
byte DoorCount;
int Color;
byte HasMoonroof;
byte HasSpoiler;
float EngineSize;
byte CylinderCount;
}
class CarVersion2 {
byte DoorCount;
int Color;
int MoonRoofType;
int TrunkAccessories;
int EngineType;
}
강점
- 솔직한 접근 방식
- 쉬운 유지합니다.
약점
- 그것은 안티 패턴의.
내가 생각하지 못한 더 나은 방법이 있습니까? 마지막 방법론에 호의적 인 것은 분명하지만 첫 번째 방법이 더 좋습니다.
글쎄, 마지막 옵션은 "동일한"개념적 객체의 두 표현에 기본 클래스를 사용하지 않으므로 반 패턴이라고 말할 수 있습니다. "기본 클래스가 상속자와 너무 가깝다는 사실이 거의 드러나지 않았습니다"- 예, 방법론을 보여주기 위해 간단한 예제를 고안하려고했습니다. 그래서 제 3의 옵션을 옹호 할 것이며, 애플리케이션 코드가 작성되면 필요한 경우 처음으로 변형 될 것이라는 점을 이해해야합니다. –
네, 저의 (길다란) 대답에 대한 당황스럽게 간결한 요약이었습니다. –
전적으로 동의합니다. –