Domanda

Sto elaborando un XML con minOccurs e maxOccurs impostati frequentemente su 0, 1 o illimitato. Ho uno schema che descrive questa cardinalità, insieme al tipo di dati specifico. Vorrei costruire una classe (Delphi) che tenga traccia della cardinalità, insieme a un array le cui dimensioni devono essere convalidate in base ai campi minOccurs e maxOccur. Credo che l'utilizzo delle varianti sia una scelta di progettazione scadente, poiché sarò pienamente consapevole del tipo di dati prima che venga letto (basato sulle regole dello schema XML).

Sono piuttosto nuovo di OOP in generale, e Delphi OOP in particolare, quindi quali sono le mie migliori opzioni qui? Ho inventato qualcosa del tipo:

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;

Naturalmente, FValue potrebbe finire per essere una stringa, un numero intero, un doppio, ecc. Quindi, credo di dover specializzarmi:

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

Ora, è la strada giusta da percorrere? Devo sovraccaricare AddValue (Value: SomeType) in tutte le diverse classi (ogni classe corrispondente a un tipo di dati)? Non sembra molto fluido, dato che farò praticamente la stessa cosa in ogni metodo AddValue:

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

Odio davvero farlo per ogni tipo. (Certo, non ci saranno molti tipi, ma lo considero ancora un design imperfetto, poiché il contenuto logico è praticamente identico nei metodi sovraccarichi.) Qualche consiglio in circolazione? Grazie!

È stato utile?

Soluzione

Non hai specificato la tua versione di Delphi, ma questo è un classico esempio di generici (disponibile in D2009 e successivi).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top