Oder nimm dir als Beispiel ein anderes Programm.
7Zip und Dergleichen
Einmal das Format und dann noch die Qualität bzw. Geschwindigkeit (hier wäre es die Datenmenge)
Schnell/Klein, Normal, AmBesten ... z.B. in 1-5, 0-4, 0-9, 1-9 oder als Enum (1-5 bzw. 1-9 und in der Mitte das Normale ... 1=das kleinstmögliche=grad noch so erkennbar, über Mitte=Default=GutGenug für den Alltag, bis Groß=BesserGehtNimmer aka noch mehr lohnt eigentlich nicht sich nicht (selbst wenn noch mehr, gibt es keinen/kaum einen Unterschied)
Ich veruch für was was Anderes och 'ne "nutzbare"
API zu erstellen ... Ergebnis ist in der Klasse eine "kleine" Anzahl der Wichtigsen/Allgemeinen Property und eine ConfigKlasse (welche im Prinzip nur sowas wie 'ne INI-artige StringListe ist) wo die SpezialDinge drin sind.
In deinem Fall:
* Datenformat
* Containerformat (mit gegenseitiger Prüfung, wenn man was Auswählt, dass das Andere nicht nuterstützt ->
Exception oder "still" zutücksetzen (btw. das Ähnlichste nehmen)
* Oder ein CombiEnum aus Beidem = das ist "übersichtlicher"/verständlicher, aber es gibt natürlich paar Formate die dann doppelt/mehrfach vorkommen
* dann noch Qualität
* und vielleicht noch ein Limit (z.B. maximale Datenrate)
* und den Rest entweder als "offene" Liste oder je eine Properties-Klasse (Beispiel die Properties-Property bei DevExpress) für die einzelnen Formate (meine ListenKlasse hat eine Abfragefunktion was es "gerade" gäbe, weil ja für den Entwickler nicht "direkt" klar ist, was da jeweils möglich ist, so ohne Codevervollständigung)
Es ist nie einfach "verschiedenes" einheitlich rauszugeben.
Entweder du hast massenhaft Eigenschaften, die bei gewissen Typen ohne Funktion sind, weil es die da nicht gibt,
oder du hast nur eine kleine Anzahl der Gemeinsamkeiten (ohne Spezialfälle)
oder je nach Typ eine eigene Liste (SubKlassen --- in einem Property, den man erstmal casten muß, ala DevExpress oder TPicture.Graphic)
oder je nach Typ eine eigene Liste (SubKlassen --- in getrenten Property ala TPicture.Bitmap, TPicture.Icon, ....)
oder man hat Vieles doppelt und "immer" eingebaut (siehe ImageEn: für jeden Ausgabetyp zusätzlich in der Hauptklasse SpezialProperty ala .Mjpeg_Compression .Mp4_MaxDataRate, ...)
oder siehe der ConnectStr in vielen
DB-Komponenten
http://docwiki.embarcadero.com/RADSt...tion_(FireDAC)
usw.