
Embrace ECA: Die Zukunft jenseits der klassischen Modulentwicklung
Wenn du schon eine Weile Drupal-Websites baust, kennst du das Muster: Eine neue Anforderung kommt herein, du greifst zu einem benutzerdefinierten Modul oder entstaubst ein veraltetes Modul, das du beigesteuert hast, und schon bald ist deine Codebasis ein Flickenteppich aus eng fokussierten Lösungen. Mit der Zeit wird die Wartung zu einer lästigen Pflicht.
Es gibt einen besseren Weg.
Mit Drupal 8 wurde das Plugin-System eingeführt - ein großer Schritt in Richtung Modularität. Plötzlich konnten wir kleine, fokussierte Klassen schreiben, um Funktionen auf saubere, wiederverwendbare Weise hinzuzufügen:

Aber Plugins sind immer noch Code. Sie müssen immer noch in Modulen implementiert, bereitgestellt und gewartet werden.
Das Event-Condition-Action (ECA)-Modul hat die Art und Weise verändert, wie wir über die Entwicklung von Drupal denken. Anstatt maßgeschneiderte Module zu entwickeln oder nach Plugins zu suchen, die für jeden Sonderfall geeignet sind, kannst du mit ECA die Logik deiner Website aus wiederverwendbaren Bausteinen - Ereignissen, Bedingungen und Aktionen - direkt in der Benutzeroberfläche (UI) zusammenstellen. Du brauchst ein fehlendes Teil? Implementiere es einfach in Code und füge es in das ECA-Framework ein. Der Rest ist Konfiguration, nicht Entwicklung.
Von Plugins zu Szenarien: Ein Wechsel in der realen Welt
ECA macht den nächsten Schritt. Mit ECA werden deine Plugins zu Szenarien - konfigurierbare, ereignisgesteuerte Workflows. Programmiere nur die fehlenden Bausteine und baue alles andere visuell zusammen:

Die Migrate-API unterstützt seit langem die Verkettung von Prozess-Plugins, aber das war bisher auf Migrationen beschränkt. Seit der Veröffentlichung von ECA's modeler_api haben wir jetzt eine visuelle Benutzeroberfläche für die Verkettung beliebiger Logik, und zwar standortweit.
Migrationsprozess trimmen
Das Modul migrate_process_trim bietet eine schnelle und einfache Möglichkeit, führende oder nachgestellte Zeichen (z. B. Leerzeichen) in einer Drupal-Migration zu entfernen. Es funktionierte für Drupal 8 und 9, hatte automatische Korrekturen für Drupal 10 und 11, wird aber nicht mehr unterstützt.
Eine der Anwendungen unseres Kunden verließ sich beim Datenimport stark darauf. Für das Upgrade auf Drupal 11 hätten wir die Wartung übernehmen können, aber stattdessen wählten wir einen anderen Weg: Wir ersetzten es vollständig durch ein ECA-gestütztes Migrationsprozess-Plugin.
Hier ist der Grund dafür:
- Die gleiche Trimmfunktionalität gab es bereits in Tamper und war in ECA über ECA Tamper verfügbar.
- Durch die Verwendung von ECA konnten wir die Trimmlogik viel flexibler gestalten.
Anstelle eines eigenständigen Prozess-Plugins haben wir ein Migrationsprozess-Plugin erstellt, das ein ECA-Ereignis auslöst. Das Szenario übernimmt das Trimmen - egal, ob es sich um eine einfache Leerzeichenentfernung oder eine komplexe Stringmanipulation handelt - ohne den Migrationscode zu berühren.
Ergebnis: Ein nicht unterstütztes Modul wurde durch ein wiederverwendbares ECA-Szenario ersetzt, das über mehrere Migrationen hinweg funktioniert.

Ersetzen von migrate_conditions durch ECA-Bedingungen
Manchmal willst du einen Wert nur umwandeln, wenn bestimmte Bedingungen erfüllt sind. In der Vergangenheit war das mit migrate_conditions möglich. Aber mit ECA kannst du die gleichen Bedingungen und mehr direkt in deinem Szenario implementieren.
Dein Migrationsprozess-Plugin löst ein Ereignis aus, ECA wertet die Bedingungen aus, und nur wenn sie erfüllt sind, wird die Umwandlungsaktion ausgeführt. So bleibt die Migrations-YAML sauber und du kannst die bedingten Regeln an einem zentralen, wiederverwendbaren Ort verwalten.
Durch diesen Tausch konnten wir ein weiteres Modul aus dem Stack des Kunden in den Ruhestand versetzen - und als Bonus müssen wir uns nicht mehr darum kümmern, ob es auf zukünftige Drupal-Versionen portiert werden kann. Da Jurgenhaas auf der Drupal-Konferenz in Portland 2024 versprochen hat, ECA "ein Leben lang" zu pflegen, sind wir in sicheren Händen.
Dieselbe Logik auf entity_import übertragen
Eine der größten Stärken von ECA ist die Wiederverwendbarkeit in verschiedenen Kontexten.
Entity Import bietet eine Benutzeroberfläche zum Importieren verschiedener Entitäten, die auf der Migrate API aufbaut. Aber:
- Um Migrate-Prozess-Plugins wiederzuverwenden, musst du sie in konfigurierbare Plugins verpacken.
- Aufgrund der begrenzten Plugin-Auswahl kannst du das gleiche Prozess-Plugin nur einmal pro Migrationsobjekt verwenden. Für die meisten Importe ist das in Ordnung, aber nicht immer.
Mit dem ECA Entity Import Prozess-Plugin entfallen diese Einschränkungen. Du kannst die gleichen Trimm- oder bedingten Logikszenarien aus deinen Migrationen in Entity-Importen wiederverwenden - ohne zusätzliche Wrapper, ohne doppelten Code.
Warum das wichtig ist
Der Building-Block-Ansatz von ECA zahlt sich in mehrfacher Hinsicht aus:
- Schnelles Prototyping - Erstelle Funktionen in wenigen Minuten, teste sie sofort und führe Iterationen durch, ohne den Code neu zu implementieren.
- Wiederverwendbarkeit - Eine einzige Transformation oder Bedingung kann mehrere Funktionen auf deiner Website unterstützen.
- Zusammenarbeit - Websiteersteller und Stakeholder können Szenarien anpassen, ohne den Code zu berühren.
- Wartungsfreundlichkeit - Aktualisierungen sind einfacher und sicherer - ändere das ECA-Szenario, anstatt Module neu zu schreiben.
Eine neue Standardeinstellung
Die Schlussfolgerung ist einfach: Hör auf, standardmäßig "ein neues Modul zu schreiben". Fang an, in Ereignissen, Bedingungen und Aktionen zu denken.
Code wird zum letzten Ausweg, der nur dazu dient, die wirklich fehlenden Teile zu ergänzen. Alles andere? Konfigurierbar in der Benutzeroberfläche, testbar ohne erneute Implementierung und wiederverwendbar auf deiner gesamten Website.
Wenn du es leid bist, eine Bibliothek von Einzweckmodulen zu pflegen, und einen saubereren, schnelleren Entwicklungsprozess willst, ist ECA nicht einfach nur ein weiteres Modul - es ist die nächste Stufe der Drupal-Site-Logik.
Neuen Kommentar hinzufügen