AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Methoden in abgeleiteten Klassen ggf. einschränken
Thema durchsuchen
Ansicht
Themen-Optionen

Methoden in abgeleiteten Klassen ggf. einschränken

Ein Thema von Gausi · begonnen am 11. Jul 2024 · letzter Beitrag vom 15. Jul 2024
 
hanvas

Registriert seit: 28. Okt 2010
171 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Methoden in abgeleiteten Klassen ggf. einschränken

  Alt 11. Jul 2024, 22:59
Das Problem dabei wäre, dass ich dann (abgesehen von TGenericTagItem) keinen sinnvollen gemeinsamen Vorfahren für die TagItems in den jeweiligen MetaDaten-Formaten nutzen kann. Denn die Unterscheidung Text/Bild/ExtendendText/Binary/... gibt es jeweils für ID3v2Items, Apev2Items, VorbisCommentItems, ...

Dann müsste ich wieder im eigentlichen Programmcode für jedes Format anders casten bzw. den Typ checken, um "GetText" aufrufen zu können. Und genau davon möchte ich ja weg.
Warum machst Du das Verhalten nicht einfach konfigurierbar und überlässt die Wahl (nichts machen, den "Fehler" loggen, eine Exception auslösen, den "Fehler" in einer Variablen speichern und mittels einer Methode wie getLastErrorCode auslesen usw.) nicht einfach den Benutzer deiner Lib.

Aber abgesehen davon. Wenn ich Dein Problem richtig verstehe dann hast Du nach:

Delphi-Quellcode:
aAudioFile := AudioFileFactory.CreateAudioFile(aFileName);
aAudioFile.ReadFromFile(aFileName);
aAudioFile.Title := EditTitle.Text;
aAudioFile.UpdateFile;
doch alle Informationen die Du brauchst. Kanst Du nicht beispielsweise AudioFileFactory um eine Methode erweitern die zu jedem Tag die richtige Klasse (oder alternativ Interface) registriert, und nutzt diese Informationen in der Methode GetAllTagItems um die richtigen Klassen zu instanzieren.

Delphi-Quellcode:

type TGenericIDTag = class ...

     TTagClass = class of TGenericIDTag;

     TTextIDTag = class( TGenericIDTag )
     end;

     TImageIDTag = class(TGenericIDTag)
     end;

     TAudioFile = class()
     private
       FFactory : TAudioFileFactory
     public
       procedure GetAllTagItems(destList: TTagItemList);
     end;

     TAudioFileFactory = class()
     public
       function CreateAudioFile(const aFileName : String) : TAudioFile;
       procedure RegisterTag(const aIdentifier : String; aTag : TTagClass);
     end;
dann hättest Du alle Informationen um beim Aufruf von GetAllTagItems eine Liste mit den "richtigen" Objekten zu konstruieren.

Delphi-Quellcode:
 TagList := TTagItemList.Create;
 try
   aAudioFile.GetAllTagItems(TagList);
   for var tag : TGenericIDTag in TagList do
    begin
     if tag is TTextIDTag then
      begin
        ....
      end;
    end;
 finally
 end;
Ich hofffe ich habe mich verständlich ausgedrückt.

hth Ha Jö
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz