Plugin (Entwurfsmuster)
Das Plugin (deutsch: Steckmodul) ist ein Entwurfsmuster aus dem Bereich der (objektorientierten) Softwareentwicklung [1] und gehört zur Kategorie der Verhaltensmuster (Behavioural Patterns). Es dient der Institutionalisierung (klaren Aufteilung) in
- öffentliche (engl. public) Teile der Software (i. d. R. Klassen / Methoden), die vom Nutzer der Software verwendet werden dürfen (veröffentlichte Teile; diese werden mit dem Plugin beschrieben), und
- solche Teile der Software, die nicht verwendet bzw. erweitert werden sollen (nicht-öffentliche Teile).
Die Verwendung ist oft eine Erweiterung im Sinne von "Funktionalität hinzufügen".
Ein Plugin besteht aus einem Erweiterungspunkt (engl. extension point) und einer oder mehreren nutzenden Erweiterungen (engl. extensions).
Verwendung
[Bearbeiten | Quelltext bearbeiten ]Plugins werden vor allem in Basissoftware (Frameworks, Menge von Basisklassen) eingesetzt. Generell empfiehlt sich die Verwendung von Plugins, wenn man die Software anderen Softwareentwicklern zur Einbindung zur Verfügung stellen möchte. Ein Plugin definiert, welcher Teil der Software benutzt und wie dieser Teil erweitert werden darf.
Ein Vorteil ist, dass die Basissoftware in den nicht veröffentlichten Bereichen problemlos weiterentwickelt werden kann. Die Art der Nutzung oder Erweiterung der Basissoftware wird standardisiert und damit leichter austauschbar.
Ein Nachteil ist, dass das Plugin extra beschrieben werden muss. Plugins schränken die Erweiterungsmöglichkeiten ein und sind in der Programmierung performance-intensiver.
Beispiele
[Bearbeiten | Quelltext bearbeiten ]Die Basissoftware ist eine Personenverwaltung, mit der Personen und ihre Adressen erfasst/geändert/gelöscht werden können. Sie stellt zwei Plugins mit den Erweiterungspunkten "Person_anlegen" und "Person_ändern" zur Verfügung. Die Basissoftware soll in einem Judoverein eingesetzt werden.
Der beauftragte Softwareentwickler
- nutzt den Erweiterungspunkt "Person_anlegen"
- mit einer Erweiterung für die Erfassung des Eintrittjahres in den Verein
- nutzt den Erweiterungspunkt "Person_ändern"
- mit einer Erweiterung für die Dokumentation der Änderung der Gewichtsklasse und
- mit einer Erweiterung für die Dokumentation einer bestandenen Gürtelprüfung
- hat aber keine Möglichkeit den Vorgang <Person löschen> zu beeinflussen bzw. zu erweitern.
Ein bekanntes Beispiel für ein Plugin-basiertes Framework ist Eclipse, eine in Java geschriebene IDE.
Einzelnachweise
[Bearbeiten | Quelltext bearbeiten ]- ↑ Martin Fowler, David Rice, Matthew Foemmel, Edward Hieatt, Robert Mie, Randy Stafford: Patterns of Enterprise Application Architecture. Addison-Wesley, 2002, ISBN 0-321-12742-0.
Abstrakte Fabrik | Erbauer | Fabrikmethode | Prototyp | Singleton | Multiton | Objektpool
Adapter | Brücke | Decorator | Fassade | Fliegengewicht | Kompositum | Stellvertreter
Beobachter | Besucher | Interpreter | Iterator | Kommando | Memento | Schablonenmethode | Strategie | Vermittler | Zustand | Zuständigkeitskette | Interceptor | Nullobjekt | Protokollstapel
relationale Abbildung
Datentransferobjekt | Table Data Gateway | Row Data Gateway | Active Record | Unit of Work | Identity Map | Lazy Loading | Identity Field | Dependent Mapping | Embedded Value | Serialized LOB | Inheritance Mapper | Metadata Mapping | Query Object | Command-Query-Responsibility-Segregation
übermittlungsmuster
File Transfer | Shared Database | Remote Procedure Invocation | Messaging
Message | Command Message | Document Message | Event Message | Request-Reply | Return Address | Correlation Identifier | Message Sequence | Message Expiration | Format Indicator
Message Endpoint | Messaging Gateway | Messaging Mapper | Transactional Client | Polling Consumer | Event-driven Consumer | Competing Consumers | Message Dispatcher | Selective Consumer | Durable Subscriber | Idempotent Receiver | Service Activator
Message Channel | Point-to-Point Channel | Publisher-Subscriber Channel | Datatype Channel | Invalid Message Channel | Dead Letter Channel | Guaranteed Delivery | Channel Adapter | Messaging Bridge | Message Bus
Pipes-and-Filters | Message Router | Content-based Router | Message Filter | Dynamic Router | Recipient List | Splitter | Aggregator | Resequencer | Composed Message Processor | Scatter-Gather | Routing Slip | Process Manager | Message Broker
Message Translator | Envelope Wrapper | Content Enricher | Content Filter | Claim Check | Normalizer | Canonical Data Model
Control Bus | Detour | Wire Tap | Message History | Message Store | Smart Proxy | Test Message | Channel Purger
Application Controller | Business Delegate | Data Access Object | Dependency Injection | Extension Interface | Fluent Interface | Inversion of Control (IoC) | Lock | Model View Controller (MVC) | Model View Presenter (MVP) | Model View Update (MVU) | Model View ViewModel (MVVM) | Page Controller | Registry | Remote Facade | Repository | Service Locator | Session State | Table Module | Template View | Threadpool | Transaction Script | Transform View | Two-Step View | Value Object