Im MVC-Artikel wurde gezeigt, wie auf der Mikroebene model, view und control separiert werden kann. Dieser Abschnitt behandelt ebenfalls ein Separierung von Code, aber aus der Makroperspektive. Stellen Sie sich vor Sie haben eine fertige Anwendung (oder sehen diese in Ihrem Kopf vor sich). Vielleicht können Sie einen Teil der Funktionen der Anwendung restlos streichen, ohne dass alle übrigen Funktionen davon betroffen sind. Wenn das möglich ist sollten Sie darüber nachdenken, diesen Teil als Plugin zu implementieren. Und zwar auch dann, wenn Sie niemals planen Ihre Anwendung ohne dieses Plugin auszuliefern. Mit dieser Strategie zerteilen Sie auf der Makroebene Ihre Anwendung in fachliche und technische Schichten die Sie getrennt voneinander entwickeln und warten können.
Was ist ein 'Plugin'? Als Plugin bezeichne ich eine Softwarekomponente, die von anderen Komponenten gerufen (benutzt) wird, weil sie sich als ein Service an einer dafür vorgesehenen Schnittstelle registriert hat. Die Registrierung ist der entscheidende Unterschied. Eine gewöhnliche Komponente kann von einer anderen Komponente benutzt werden, wenn sie dieser bekannt ist. Es gibt dann unweigerlich Abhängigkeiten von der benutzenden (master, M) zur benutzten (service, S) Komponente.
M --> SSpeziell bei der GUI-Entwicklung gibt es nun das Problem, dass der Service S im allgemeinen bei M viel Wirkung verursacht. Das ist eine umständliche Umschreibung dafür, dass eine GUI im allgemeinen eine hoch interaktive Anwendung sein soll, dass zum Beispiel der Klick auf ein Menüpunkt einen Service S triggert, der als Ergebnis die komplette GUI-Ansicht bei M anpasst. Wir wünschen also eher eine Abhängigkeit in diese Richtung:
M <-- SDas Problem dabei ist, dass nun M von der Existenz S nichts weiß und S nicht aufrufen kann. Damit das möglich ist muss sich S bei M über von M vorgegebene Schnittstellen registrieren. Mit dieser Strategie lässt sich dann ein System als eine Schichtung aufeinander basierender Services oder Plugins designen.
Für eine Umsetzung dieser Strategie brauchen Sie eine Infrastruktur, die die Registrierung Ihrer aus Services komponierten Anwendung vornimmt. Dafür gibt es verschiedene Ansätze: