문제

미세 쿠퍼로 XML을 처리하고 Maxoccurs가 0, 1 또는 무한대로 자주 설정되어 있습니다. 특정 데이터 유형과 함께이 카디널리티를 설명하는 스키마가 있습니다. 나는 Minoccurs와 Maxoccur 필드를 기반으로 치수를 검증 할 배열과 함께 카디널리티를 추적하는 (Delphi) 클래스를 구성하고 싶습니다. 데이터 유형을 읽기 전에 (XML 스키마 규칙에 따라) 데이터 유형을 완전히 알고 있기 때문에 변형을 사용하는 것이 불량한 설계 선택이라고 생각합니다.

나는 일반적으로 OOP를 처음 접했고 특히 Delphi OOP는 여기에서 가장 좋은 옵션은 무엇입니까? 나는 다음과 같은 꿈을 꾸었습니다.

TComplexType = class(TObject)
  FMinOccurs: integer;
  FMaxOccurs: integer;
  FValue:     Array of Variant;
public
  constructor Create(Min: integer; Max: integer);
  procedure AddValue(Value: variant);
  function Validate() : boolean;
end;

물론 FValue는 줄, 정수, 더블 등이 될 수 있습니다. 따라서 전문화해야한다고 생각합니다.

TComplexString = class(TComplexType)
  FValue:     Array of string;
end;

자, 올바른 방법은? 모든 다른 클래스 (데이터 유형에 해당하는 각 클래스)에서 AddValue (value : sombertype)를 과부하해야합니까? 나는 모든 addValue-method에서 거의 똑같은 일을하기 때문에 그다지 매끄럽지 않은 것처럼 보입니다.

procedure AddValue(Value: SomeType);
begin;
  // 1) Re-shape array
  // 2) Add Value as the last (newly created) element in the array
end;

나는 모든 유형에 대해 이것을하는 것을 정말로 싫어합니다. (논쟁의 여지없이, 많은 유형은 없지만 논리적 컨텐츠가 과부하 된 방법에서 거의 동일하기 때문에 여전히 결함이있는 디자인을 고려합니다.) 좋은 팁이 있습니까? 감사!

도움이 되었습니까?

해결책

델파이 버전을 지정하지는 않았지만 제네릭의 전형적인 예입니다 (D2009 이상으로 제공).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top