Frage

Ich bin die Verarbeitung eines XML mit minOccurs und maxOccurs setzt häufig entweder 0, 1 oder unbegrenzt. Ich habe ein Schema diese Mächtigkeit beschreiben, zusammen mit dem spezifischen Datentyp. Ich möchte einen (Delphi) Klasse konstruieren, die Spur der Kardinalität hält, zusammen mit einer Anordnung, deren Abmessungen bezogen auf die minOccurs und maxOccur Felder validiert werden. Ich glaube, mit Varianten ist eine schlechtes Design Wahl, da ich voll und ganz vom Datentyp darüber im Klaren sein werde, bevor es (auf der Basis der XML-Schema-Regeln) gelesen wird.

Ich bin ziemlich neu in der Regel OOP und Delphi OOP insbesondere, so etwas sind meine besten Optionen hier? Ich habe geträumt etwas wie:

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;

Natürlich kann eine Zeichenfolge sein fValue kann am Ende, eine ganze Zahl, ein Doppelzimmer, etc. So, ich glaube ich brauche zu spezialisieren:

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

Nun ist der richtige Weg zu gehen? Muss ich zu AddValue (Wert: Sometype) überlasten in den verschiedenen Klassen (jede Klasse in einen Datentyp entspricht)? Das nicht sehr glatt erscheinen, wie ich in jeder AddValue-Methode so ziemlich das gleiche tun würde:

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

Ich würde wirklich hasse diese für jede Art zu tun. (Zugegeben, wird es nicht so viele Arten, aber ich es noch fehlerhaft Design betrachten, da der logische Inhalt ziemlich identisch in den überladenen Methoden ist.) Jedes gute Tipps da draußen? Vielen Dank!

War es hilfreich?

Lösung

Sie hat nicht angegeben Ihre Delphi-Version, aber dies ist ein klassisches Beispiel für Generika (erhältlich in D2009 und höher).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top