Skip to Main Content
Support for dynamic and client-specific customization is required in many application areas. We present a (distributed) application as consisting of a minimal functional core, implemented as a component based system, and an unbound set of potential extensions that can be selectively integrated within this core functionality. An extension to this core may be a new service due to new requirements of end users. Another important category of extensions we consider are non-functional services such as authentication, which typically introduce interaction refinements at the application level. In accordance with the separation of concerns principle, each extension is implemented as a layer of mixin-like wrappers. Each wrapper incrementally adds behavior and state to a core component instance from the outside, without modifying the component's implementation. The novelty of this work is that the composition logic, responsible for integrating extensions into the core system, is externalized from the code of clients, core system and extensions. Clients (end users, system integrators) can customize this composition logic on a per collaboration basis by 'attaching' high-level interpretable extension identifiers to their interactions with the core system.