Я обрабатываю XML с minOccurs и maxOccurs, которые часто устанавливаются в 0, 1 или неограниченно. У меня есть схема, описывающая эту мощность, вместе с конкретным типом данных. Я хотел бы создать класс (Delphi), который отслеживает количество элементов, вместе с массивом, размеры которого должны проверяться на основе полей minOccurs и maxOccur. Я полагаю, что использование вариантов - плохой выбор дизайна, так как я буду полностью осведомлен о типе данных, прежде чем они будут прочитаны (на основе правил схемы XML).
Я довольно новичок в ООП в целом и в Дельфи ООП в частности, так какие мои лучшие варианты здесь? Я придумал что-то вроде:
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: SomeType) во всех разных классах (каждый класс соответствует типу данных)? Это не очень удобно, так как я буду делать примерно одно и то же в каждом методе AddValue:
procedure AddValue(Value: SomeType);
begin;
// 1) Re-shape array
// 2) Add Value as the last (newly created) element in the array
end;
Я бы очень не хотел делать это для каждого типа. (Следует признать, что типов будет не так много, но я все же считаю это некорректным дизайном, поскольку логический контент в перегруженных методах практически идентичен.) Есть ли полезные советы? Спасибо!