Ich bin gerade dabei, eine meiner Klassensammlungen etwas zu überarbeiten - es geht dabei um das Auslesen und Bearbeiten von Metadaten (aka "ID3-Tags") in Audio-Dateien....
Soweit so gut. Ich würde die Funktionalität der Basisklasse gerne erweitern, und da stoße ich auf ein kleines Konzept-Problem.
Meine Idee wäre, in der konkreten Implementierung von "TSomeTagItem.SetText" zu überprüfen, ob das TagItem mit dem aktuell gesetzten Key überhaupt Textdaten enthält (das wird über den jeweiligen Standard bzw. die Dokumentation geregelt). Falls ja: ok, fein. Und falls nein? Einfach "nichts" machen? Aus der Set-Procedure eine Function machen und "False" zurückliefern? Eine
Exception schmeißen?
Gibt es da eine andere Möglichkeit, die ggf. "sauberer" oder eleganter ist?
Wäre nicht der umgekehrte Weg, vom abstrakten zum konkreten, der bessere Weg. Also eine mehr oder weniger allgemeingültige Klasse
Delphi-Quellcode:
TGenericTagItem = class ...
procedure setData(var data);
procedure setData(const data : pointer);
procedure setData(const data : array of byte);
procedure setData(const data : TByteArray);
end
und dann davon Ableitungen die Methoden für die konkreten Daten haben:
Delphi-Quellcode:
TTextTagItem = class(TGenericTagItem)
procedure setText(const text : String);
end;
TImageTagItem = class(TGenericTagItem)
procedure setImage(aImage : TImage);
end;
die ja dann intern wieder die generischeren Varianten aufrufen können.
cu Ha-Joe