Lade...
 

Widget Provider

Widget Provider

die Grundidee

In der Oberfläche eines neuen Moduls werden Komponenten gebraucht, die schon mal in anderen Modulen realisiert wurden. Damit kein weitgehend identischer InstantView-Code entsteht, sollen Elemente der Oberflächenbeschreibung wiederverwendet werden.

Reusing

Im neuen Window wird für Komponente 2 fertiger Code aus Modul A verwendet, Komponente 3 benutzt eine bereits vorhandene Lösung aus Modul B

Im Folgenden nennen wir das importierende Modul Consumer, die Module mit wiederverwendbaren Komponenten heißen Provider-Module.

Zielstellung und Abgrenzung zur Widget-Vererbung

  • Ein Consumer-Modul kann aus beliebig vielen Provider-Modulen importieren.
     
  • Consumer und Provider sind so weit wie möglich entkoppelt. Die Nachnutzung durch Consumer-Module darf die Weiterentwicklung der Provider-Module nicht behindern. Deshalb sind Widget-Befehle auf ihren Import-Context beschränkt und Widget-Befehle, die aus dem importierten Provider-Widget ausgeführt werden, können Widgets des Consumers by-name nicht finden und vice versa.
     
  • Ein Provider-Tag + das Tupel (Window-Name, Name der Komponente) bilden das Interface zwischen Provider und Consumer.
    Ein Consumer bezieht sich niemals direkt auf ein Provider-Modul. Wie beim Procedure-Providing wird mittels des Provider-Tags nach einem Modul gefragt, das die entsprechende Komponente anbietet. (Der Code auf der Provider-Seite ist frei für jede Art des Refactorings, z.B. die Vererbungshierarchie zu ändern.)
     
  • Der mit den Widgets verbundene InstantView-Code wird mitimportiert! Nicht nur die Oberflächenbeschreibung soll wiederverwendet werden, sondern auch die bereits in dem Provider-Modul implementierte Logik.
    Die folgenden drei Punkte verweisen auf die Möglichkeiten, mit denen der importierte Code nahtlos in das Consumer-Modul integriert werden kann.
     
  • Der Consumer kann die Reaktion auf Events der importierten Komponenten überschreiben und erweitern.
     
  • Variable Binding: Variable im Consumer Code und Variable im importierten Code werden so miteinander verbunden, dass sie den gleichen Wert referenzieren. Die Bindung gilt nur für den Import. Man kann die gleiche Komponente mehrfach importieren, aber unterschiedliche Variablenbindungen definieren. Variablenbindung gibt es nur für Variable im Module-Scope.
     
  • Partieller Import: Im Provider-Modul wurde eine größere Komponente entworfen, von der jetzt nur ein Teil importiert werden soll.
    Das Problem: der importierte Code kann sich auch nicht mitimportierte Widgets beziehen.
    Statements, die nur die Oberfläche modifizieren, werden ignoriert. Gibt es Statements, die von einem nicht mitimportierten Widget lesen, funktioniert der Import nicht und ist vermutlich auch logisch nicht sinnvoll.
     

InstantView Anweisungen

Statement Import

Wie werden Events überschrieben?

Statement ImportContext (Variable Binding)

Partieller Import

FillWindow / DrainWindow / ClearWindow

ein Beispiel

Die Anwendung ist das Consumer Modul

ConsumerCodeExample

und bezieht sich mit dem Tag item auf einen Provider
 

ProviderCodeExample

Eine von einem Provider importierte Komponente darf selbst importierte Komponenten enthalten; Widget-Providing funktioniert auch transitiv.