Einzelnen Beitrag anzeigen

Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#9

AW: typisierte Konstante definieren: const C: array [...] of TGUID = (...);

  Alt 17. Aug 2012, 13:33
Ich kann den architektonischen Ansatz verstehen. Vielen Dank für den Hinweis! Im größeren Stil würde ich ihn auch einsetzen, nicht aber in diesem kleinen Fall. Wenn man also eine "(parametrisierte) Fabrik" hier erkennen möchte, dann ist sie auf eine Zuordnung reduziert zwischen einem programmexternen Wert var F: TFormat und einer Schnittstelle var Schnittstelle: interface of IFormat . Weil es letzteren Typ nicht gibt und Delphi an dieser Stelle den Schnittstellentypbezeichner nicht als Schnittstellentypidentifikation zulässt, wird letztere eben als GUID const SchnittstelleGUID {: TGUID} = '...'; zugeordnet:
const Formate: array[TFormat] of TGUID = (SchnittstelleGUID); Damit kann ich von einer Instanz var Instanz: IInterface erfragen, ob sie ein bestimmtes Format var Format: IFormat untersützt: if Supports(Instanz, Formate[F], Format) then... Der weitere Ablauf ist dann unabhängig vom tatsächlichen Format.

Aber warum eine Konstante? * Die Formate ändern sich nicht in der Lebenszeit einer Programmversion. * Es sind Daten, nicht Anweisungen. * Weil es nur eine handvoll Werte sind und es kein riesiges Konstrukt ist, ist die Notation leicht (leichter) zugänglich (als mit einer verwaltenden Klasse). * Die Zuordnung kann dort angebracht werden, wo auch die Formate definiert sind -- bei type TFormat . * Es ist nicht perfekt, aber wenn sich die Anzahl der Formate zukünftig ändert, wird beim Kompilieren schon gemerkt, dass die Zuordnung nicht mehr passt. Frühes Fehlerfinden bedeutet fast immer auch geringere Kosten.

Ich wollte die Verbindungen zwischen Schnittstelle (und, wegen des Kompromisses, ihrer GUID) und dem externen Wert nicht verlieren. Denn ich glaube, dass jede Information nur ein einziges Mal notiert werden sollte. Das zwingt zwar einerseits zu sehr starker Formalisierung und Abstraktion, was merklichen Aufwand macht, aber auch zu kürzeren Programmen führt (Skaleneffekt). Das verringert entsprechend auch den Testaufwand, denn es sind weniger Quelltextzeilen zu testen. Zudem kann man sich sicher sein: Wenn man einmal ändern muss, gibt es eine (einzige) Stelle, das zu tun. Keine quälenden Gewissensbisse "Habe ich jetzt alles...?", was ich gedanklich sehr befreiend finde.

Das war nun ziemlich weit ausgeholt und vieles auch nur angerissen. Fabriken haben ihre Berechtigung, ich setze sie selbst ein. Aber ich hoffe, dass ich meine Sicht ein wenig klarer machen konnte. Vielleicht nutzt es Dir oder den Mitlesern an anderer Stelle.
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."

Geändert von Panthrax (17. Aug 2012 um 13:38 Uhr) Grund: Nichts ist perfekt beim ersten Mal... ;-)
  Mit Zitat antworten Zitat