Freitag, 28. November 2008

Ein Kreis... oder doch lieber ein Schälchen?

Aus irgendeinem Grund habe ich immer wieder das Problem nicht ganz sicher zu wissen, ob jetzt ein required interface nun eigentlich der Teil der Schnittstelle ist, der die Schnittstelle benötigt oder doch eigentlich anbietet.
Selbes Problem gilt natürlich vice versa für die provided interfaces.
Natürlich, die Benennung scheint klare Bände zu sprechen, aber ist dem wirklich so?!

Zwar dachte ich (so wie vermutlich alle anderen) das Prinzip verstanden zu haben, doch trotzdem tauchen immer wieder gewisse Zweifel auf.
Deswegen werde ich in diesem Blogeintrag versuchen, dieser Frage auf die Spur zu kommen um dem Mysterium endlich ein Ende zu setzen.

Zweifel 1

Hier einmal das Modell, welches maßgeblich an dem ganzen Problem beteiligt ist:


Und jetzt meine Frage: macht das Sinn, dass der ShockwavePlayer eine Komponente anbietet, auf die sich der Browser einlassen muss?!
Oder verfeinern wir die Frage: wenn es wirklich so wäre, dass der Player eine Komponente anbietet, auf die sich die Browser einstellen müssen, wieso gibt es dann verschiedene Player-Implementationen für verschiedene Browser?

Fortsetzung folgt...

4 Kommentare:

Michael Derntl hat gesagt…

Kreis ist angebotene Schnittstelle (provided interface), ein Schälchen definiert eine benötigte Schnittstelle (required interface; das Schälchen wird um die von einer anderen Komponente angebotene Schnittstelle gemalt).

Manfred Klaffenboeck hat gesagt…

wie gesagt, vom Prinzip her verstanden - aber die fragen tauchen doch immer wieder auf

Michael Derntl hat gesagt…

Zu Ihrem "Zweifel 1" Diagramm mit dem Plugin im Browser. Plugin Architekturen können unterschiedlich gestaltet sein. Hier könnte es bspw. so sein, dass der Browser eine Schnittstelle definiert die er *benötigt*. Das Plugin müsste diese dann anbieten und implementieren (so wie in Ihrem Beispieldiagramm). Das macht schon Sinn, es ist ja nicht so dass das Plugin eine beliebige Schnittstelle anbieten kann, auf die sich der Browser einlassen muss. Provided/required sagt nichts darüber aus, welche der beteiligten Komponenten nun die Schnittstelle (die Operationen) *definiert*. Auch bei MS Office Addons ist es ähnlich: MS Office definiert z.B. ein COM Interface, dass man implementieren muss. Gleichzeitig kann sich das Addon über eine COM Schnittstelle als Addon bei der Host-Anwendung (z.B. MS Word) registrieren. Beide Schnittstellen (und viele weitere) werden hier ausschliesslich durch die Host-Anwendung definiert. Das Plugin hat sich danach zu richten.

Manfred Klaffenboeck hat gesagt…

Hmmm... dann beginnt das ganze schon tatsächlich Sinn zu machen...
Danke für diesen Hinweis!