Dynamic Application Composition with Plux.NET
Composition Model, Composition Infrastructure

Reinhard Wolfinger
Christian Doppler Laboratory for Automated Software Engineering
Institute for System Software
reinhard.wolfinger@gmail.com


Abstract

Although modern applications are often designed to have a component-based architecture, they are usually deployed as a monolithic piece. The monolith causes problems when applications get feature-rich and should be made customizable. Dynamic composition allows developers to build an application where users only load components they need for their current work. This keeps the application small and simple. Moreover, dynamic composition means that an application can be reconfigured on the fly by dynamically swapping sets of components without programming or configuration.

Plux.NET is a component model and infrastructure for dynamic composition: The component model specifies requirements and provisions among components declaratively using the component's metadata. The discovery core supports automatic discovery of components using exchangeable discovery mechanisms. The composition core uses the metadata to compose an application by matching requirements and provisions, and stores connections between components in the composition model. Component developers use an event-based programming model, which gives host components a uniform mechanism to integrate contributor components at startup as well as at run time when an application dynamically changes.

If an application can be reconfigured while it is running, then the user interface must also change dynamically. Best practice guidelines for user interface design show how to consider that the user interface will be adaptable at run time. Special widgets bind to the composition model and simplify the implementation of dynamic user interfaces, because they automatically update their content and state when the composition model changes.

Kurzfassung

Moderne Programme haben eine komponentenbasierte Architektur und werden dennoch meist als Monolith ausgeliefert. Das verursacht Probleme, wenn man große Programme mit vielen Funktionen für einzelne Benutzer anpassen will. Mit dynamischer Komposition lassen sich Programme entwerfen, bei denen ein Benutzer nur jene Komponenten lädt, die er für seine aktuelle Aufgabe benötigt. Das hält Programme klein und einfach. Wenn sich die Aufgabe des Benutzers ändert, konfiguriert er das Programm um, während es läuft. Dabei tauscht er die nicht mehr benötigten Komponenten durch andere Komponenten aus. Dieser Vorgang erfordert weder Programmierung noch Konfiguration.

Plux.NET ist ein Komponentenmodell und eine Infrastruktur für dynamische Komposition. Das Komponentenmodell spezifiziert Anforderungen und Garantien zwischen Komponenten deklarativ mit Steckplätzen und Steckern in den Metadaten der Komponenten. Der Discovery-Kern unterstützt dynamisches Entdecken von Komponenten mittels austauschbarer Mechanismen. Der Composer-Kern baut eine Anwendung auf Basis der Metadaten zusammen, indem er Stecker und Steckplätze verbindet. Entwickler verwenden ein ereignisbasiertes Programmiermodell. Der Mechanismus zur Integration anderer Komponenten ist dabei einheitlich, egal ob Komponenten beim Programmstart, oder zur Laufzeit, wenn das Programm angepasst wird, zusammengesteckt werden.

Wenn Programme angepasst werden während sie laufen, muss sich die Benutzerschnittstelle dynamisch ändern. Best Practice-Richtlinien beschreiben wie man eine Benutzerschnittstelle so entwirft, dass sie zur Laufzeit angepasst werden kann. An Steckplätze gebundene Steuerelemente vereinfachen die Implementierung von dynamischen Benutzerschnittstellen, weil sie ihren Inhalt und Zustand bei Änderungen im Kompositionsmodell automatisch ändern.


PhD thesis, Johannes Kepler University Linz, January 2010.

Download as PDF