Ihr Browser versucht gerade eine Seite aus dem sogenannten Internet auszudrucken. Das Internet ist ein weltweites Netzwerk von Computern, das den Menschen ganz neue Möglichkeiten der Kommunikation bietet.

Da Politiker im Regelfall von neuen Dingen nichts verstehen, halten wir es für notwendig, Sie davor zu schätzen. Dies ist im beidseitigen Interesse, da unnötige Angstzustiände bei Ihnen verhindert werden, ebenso wie es uns vor profilierungs- und machtsächtigen Politikern schützt.

Sollten Sie der Meinung sein, dass Sie diese Internetseite dennoch sehen sollten, so können Sie jederzeit durch normalen Gebrauch eines Internetbrowsers darauf zugreifen. Dazu sind aber minimale Computerkenntnisse erforderlich. Sollten Sie diese nicht haben, vergessen Sie einfach dieses Internet und lassen uns in Ruhe.

Die Umgehung dieser Ausdrucksperre ist nach §95a UrhG verboten.

Mehr Informationen unter www.politiker-stopp.de.



Architekturentscheidungen

Im Moment haenge ich an einer Designentscheidung… Letztendlich gibt es bei meinem Problem viele Loesungen und alle funktionieren auch.

Ich arbeite zur Zeit mit OpenGL in .NET und da treffen zwei voellig verschiedene Paradigmen aufeinander. OpenGL verwaltet seine Stacks selbststaendig; jede Methode ist static. Das passt nicht zu objektorientierter Programmierung, aber man kann OpenGL ja nicht einfach biegen, wie man es gerne haette. Die Favoriten sind im Moment folgende (wobei ich bei jedem die Nachteile hasse):

Klassendiagramm

Klassendiagramm

Ganz links wird eine verschachtelte Fassade mit einem Singleton (Nested Facaded Singleton) genutzt, um die Zustandsbehaftung und gleichzeitig die statische Natur von OpenGL zu erhalten, indem die aeussere Klasse die selben Methoden anbietet, wie die innere Klasse. Nur die aeussere Klasse kann auf die Methoden der inneren Klasse zugreifen. Die aeussere Klasse bietet statische Methoden an, die innere bietet nicht-statische Methoden ueber ein Singleton (d.h. nur einmalige Instanzierung moeglich) an. Die Klasse NestedFacade macht nun z.B. in ihrer Methode Method folgendes:

public static void Method()
{
    Singleton.Instance.Method();
}

Und da ist auch direkt der Knackpunkt: Ich verdopple somit die Anzahl der Methoden ohne die Funktionalitaet zu erhoehen. Hierdurch erzeuge ich eine hohe Kopplung ohne die Kohaesion zu veraendern. Das allein reicht fuer mich eigentlich schon als Totschlagargument.

In der Mitte ist ein klassisches Singleton Pattern (mit Threadsicherheit durch Locking*) abgebildet. Im Moment habe ich meine Klasse auf die Art modelliert. Eigentlich stoert mich daran auch nur, dass ich jedesmal via Instance darauf zugreifen muss:

Singleton.Instance.Method();

Bisher hat mich das sehr gestoert, da ich das Singleton doch sehr haeufig benutzen muss.

Naja * Locking ist auch so eine Sache. In C# gibt es da viele Herangehensweisen: Einfaches Locken, Double-Lock Idiom, Static Constructor, Instance Container, Delegation statt Locken, Verwendung anonymer Delegate… Jedes (Not-)Locking Idiom macht meist nur in einem Pattern Sinn und ist ansonsten ein Anti-Pattern. Argh.

Letzteres Diagramm zeigt eine einfache Facade, die die OpenGL Methoden kapselt. Problem hierbei: Da ich das Objekt an mehreren Stellen benoetige, muesste ich die selbe Referenz an mehreren Orten verwalten. Das ist mir viel zu viel Overhead und die Kopplung explodiert ins bodenlose. Der Vorteil dabei waere jedoch, dass die Kohaesion bei 100% liegen wuerde.

Lustigerweise hatte ich bei der Modellierung des restlichen Systems keinerlei Schwierigkeiten, da alles sehr offensichtlich in die diversen Patterns gepastet hat.

Einen Kommentar schreiben: