State of ECA: Was ist neu in Drupal's neuer Regel-Engine mit beta-2
Die Entwicklung von ECA wurde in den letzten 4 Monaten intensiv vorangetrieben, seit wir dieses neue Modul zum ersten Mal der Drupal-Gemeinschaft vorgestellt haben. Sehen wir uns die Funktionen und Ideen an, die es bereits in das Modul geschafft haben.
Wer arbeitet daran
Neben den Code-Maintainern Daniel, Jürgen, Max und Richard haben wir auch unterstützende Teammitglieder wie Nico, der ein schönes Logo beigesteuert hat, Ralf, der uns hilft, das Projekt bekannt zu machen und Feedback zu geben - und ein paar andere, die ECA bereits benutzen und sich in der Warteschlange mit Problemen und Funktionswünschen zurückmelden. Das hat uns sehr geholfen, uns zu konzentrieren und in so kurzer Zeit eine erste stabile Version zu entwickeln.
Wie wir vorankamen
Obwohl wir uns noch in einem frühen Stadium befinden, haben wir die Kernkomponenten optimiert, indem wir die Art und Weise, wie ECA seine Konfigurationseinheiten speichert, sowie den Caching-Mechanismus geändert haben, um die Auswirkungen auf die Leistung beim Einsatz von ECA in Produktionsumgebungen weiter zu reduzieren. Der Overhead, den ECA für Ihre Live-Site mit sich bringt, ist vernachlässigbar. Es werden nur dann Ressourcen verbraucht, wenn aufgrund von konfigurierten Ereignissen, auf die Ihre ECA-Modelle reagieren wollen, etwas getan werden muss.
Auch die Codestruktur wurde überarbeitet. Es gibt nun einen ECA Core, der das Config Entity Handling, den ECA Prozessor, alle benötigten Plugin Manager und zahlreiche Interfaces, Traits und Basisklassen bereitstellt, die von den nun 10 Submodulen genutzt werden, die mit ECA geliefert werden:
- ECA Base: ermöglicht den Zugriff auf Context, Cron, Custom Events, State System und Tokens
- ECA Config: integriert sich in das CMI von Drupal
- ECA Content: unterstützt Content Entities, Felder API und weitere Token
- ECA Form: integriert mit Drupal's form API
- ECA Migrate: integriert sich mit den Ereignissen des Migrate-Moduls
- ECA Misc: stellt Ereignisse aus dem Symfony-Kernel, dem Drupal-Kern und dem Routing-System zur Verfügung
- ECA Queue: ermöglicht das Einreihen von Aufgaben in eine Warteschlange für asynchrone oder geplante Verarbeitung
- ECA User: integriert mit Ereignissen und Aktionen, die sich auf Benutzerkonten beziehen, wie z.B. Login, Logout, Cancel, Accountwechsel und Rollen
- ECA Views: ermöglicht die Verarbeitung von Views mit Weiterverarbeitung oder Export der Ergebnismenge
- ECA Workflow: integriert sich in das Drupal Content Moderation Framework
Bitte beachten Sie, dass ECA ausschließlich von Drupal Core und dem neuen bemerkenswerten Context Stack Modul von Max abhängt, das wir aus der ECA-Codebasis extrahiert haben, weil seine Funktionalität auch für andere Tools nützlich ist. Dies ist beabsichtigt, damit Sie ECA einfach einbinden können, ohne dass andere Komponenten installiert oder aktiviert sein müssen.
Allgemeine Funktionen im ECA-Kern
Mit all den oben aufgezählten Submodulen erhalten Sie bereits umfassende Listen von Ereignissen, Bedingungen und Aktionen entweder von ECA oder vom Drupal-Kern. Zusätzlich bietet ECA integrierte Unterstützung für wichtige APIs und Funktionen, die hervorgehoben werden müssen:
- Kontextstapel: Jeder Prozess, der durch ein Ereignis ausgelöst wird, sowie jede Aktion eines solchen Prozesses wird in einem eigenen (stapelbaren) Kontext ausgeführt, so dass ECA den Kontext nach der Ausführung in den Zustand zurückversetzen kann, in dem er sich unmittelbar vor der Verarbeitung befand. Dies macht nicht nur jeden Prozess vorhersehbar, sondern erlaubt es auch, den aktuellen Kontext in die Warteschlange weiterzuleiten, falls ein Modell Aktionen asynchron verarbeiten möchte.
- Caching: alle ECA-Modelle werden auf eine spezielle Art und Weise gecached, so dass ECA fast ohne Overhead feststellen kann, ob eines der ausgelösten Ereignisse in Ihrer Drupal-Site von ECA verarbeitet werden muss.
- Schleifen: Standardmäßig operieren Aktionen in einem ECA-Modell auf einem Datenobjekt, das oft so etwas wie eine Inhaltsentität, eine Route, eine HTTP-Anfrage oder ein anderer beliebiger Wert ist. Wenn Sie eine Liste von Objekten anstelle einer einzelnen Instanz angeben, dann führt ECA automatisch eine Schleife über jedes dieser Objekte mit den nachfolgenden Aktionen im Prozessmodell aus.
- Logging: alles in ECA ist so aufgebaut, dass es detaillierte Log-Informationen liefert, die in den Drupal Logger Service geschrieben werden. Es hängt von Ihrem eigenen Setup ab, ob diese Logging-Informationen in Watchdog, Syslog oder anderswo geschrieben werden. Um zu vermeiden, dass die Logs nur von ECA überschwemmt werden, können Sie den Umfang der Log-Informationen, die von ECA kommen, mit einer einzigen Einstellung konfigurieren, die standardmäßig nur Fehlermeldungen und Ausnahmen enthält.
- States: Das Lesen und Schreiben von und in Drupals Statussystem hilft dabei, einige Daten für eine spätere Verwendung zu persistieren, auch wenn dies über einen längeren Zeitraum erforderlich ist.
- Tokens: Die Token-Umgebung von Drupal Core ist bereits sehr leistungsfähig. ECA baut darauf auf und erweitert sie durch die Einführung von DTOs (Data Transfer Objects). Dieser Mechanismus erlaubt es jedem Ereignis, jeder Bedingung oder Aktion in einem ECA-Modell, beliebige Daten in der Token-Umgebung zu speichern, so dass nachfolgende Komponenten des Modells bei Bedarf auf diese Daten zur weiteren Verarbeitung zugreifen können.
- TypedData: Eine der wichtigsten Funktionen und vermutlich die am häufigsten verwendeten Bedingungen und Aktionen beziehen sich auf Entitätsfelder. Diese Felder können komplexer sein als nur einzelne Werte zu speichern, sie können sogar Werte mit beliebiger Kardinalität speichern. Um den ECA-Modellen einen generischen Zugriff auf jede Komponente solcher Felder zu ermöglichen, ist die TypedData-API das ideale Werkzeug, das vom Drupal-Kern bereitgestellt und von ECA genutzt wird.
- Rekursionsvermeidung: Es mag unbeabsichtigt passieren, aber ECA-Modelle können, wie jede andere Regeldefinition, schnell in einer Rekursion enden. Der einfachste Anwendungsfall wäre eine Entitätsaktualisierung, die zu einem Prozess führt, der weitere Änderungen an dieser Entität vornimmt - eine weitere Entitätsaktualisierung, die bereits eine Rekursion einleitet. Da dies immer zu einer Endlosschleife führen würde - etwas, das Sie auf Ihrer Produktionsseite lieber nicht erleben möchten - verhindert ECA zwangsläufig, dass dies geschieht. Selbst um den Preis, dass Sie bestimmte Modelle nicht mehr erstellen können. Es sollte jedoch immer einen Weg geben, dies zu umgehen - und die Issue Queue auf drupal.org oder dieser Slack Channel sind großartige Orte, um in solchen Situationen Hilfe zu suchen.
Arbeiten an der Testabdeckung
Wir haben bereits mit der Erstellung von Tests begonnen, von einfachen Unit-Tests bis hin zu Kernel- und Funktionstests, aber auch ein leistungsfähiges Framework zum Testen aller ECA-Modelle, egal wie komplex sie sind. Dies hilft uns, die ECA-Entwicklung voranzutreiben und gleichzeitig sicherzustellen, dass die bestehenden Funktionen intakt bleiben. Allerdings gibt es noch viel zu tun, um die Testabdeckung auf das erforderliche Niveau zu bringen. Darauf werden wir uns in den kommenden Wochen konzentrieren.
Integration mit anderen Modulen
Nun, da der ECA-Kern mit all seinen integrierten Untermodulen seine eigenen APIs stabilisiert hat, ist es an der Zeit, mit anderen Entwicklern von beliebten und nützlichen Modulen zusammenzuarbeiten, um deren Funktionalität für ECA und seine Modelle verfügbar zu machen. Die Liste der Module, die wir gerne integrieren würden, wird in dieser Ausgabe verfolgt, und wenn jemand weitere Module zu dieser Liste hinzufügen möchte, ist dies der richtige Ort, um den Ball ins Rollen zu bringen.
Über die von den Modellierern bereitgestellte Benutzeroberfläche sprechen
So mächtig und funktionsreich das ECA-Framework auch ist, es benötigt immer noch die UI-Komponente, die es den Benutzern ermöglicht, ihre Modelle zu erstellen und zu pflegen. Dies ist eine separate Aufgabe und völlig entkoppelt von ECA als Backend-Prozessor. Die Komponente, von der hier die Rede ist, wird Modellierer genannt. Und es kann mehr als nur einen geben. BPMN als einer der populären Standards zur Beschreibung von Geschäftsprozessen wird von einer Vielzahl von Anwendungen unterstützt, die es erlauben, mit solchen Modellen zu arbeiten. Zwei davon wurden bereits in ECA integriert: Camunda und BPMN.iO. Aber auch andere, auch solche, die nicht auf BPMN basieren, können integriert werden, und wir hoffen auf Initiativen, die mit der Entwicklung solcher Modelle beginnen wollen.
Was jedoch für alle bestehenden und zukünftigen Modellierer-UIs wichtig ist, ist eine großartige Benutzererfahrung (UX). Daran haben wir bei den bestehenden Integrationen noch nicht gearbeitet, und das ist einer der Bereiche, in den wir mehr Ressourcen investieren müssen - aber dafür brauchen wir auch Hilfe. Das bestehende ECA-Team ist mit all den Verarbeitungs- und Hintergrundaufgaben beschäftigt. Um auch bei der Benutzeroberfläche schneller voranzukommen, suchen wir nach Hilfe.
Abschluss
Es wurde viel erreicht! Und ich meine sehr viel. Das Team ist wirklich stolz darauf und das Feedback, das wir erhalten, ist ebenfalls sehr positiv. Wir sind sogar der Meinung, dass ECA kurz vor der Fertigstellung seiner 1.0-Version steht. Ja, wir geben zu, dass es noch ein weiter Weg ist, bis es von "Mainstream"-Benutzern verwendet werden kann. Die oben erwähnten UI-Komponenten sowie eine umfassende Dokumentation sind nur die 2 wichtigsten Aufgaben, die uns einfallen.
>
Aber es hat sich gezeigt, dass ECA nicht nur sein ursprüngliches Ziel erreicht hat, einen "Rules"-Ersatz für Drupal 9 und darüber hinaus bereitzustellen, sondern auch darüber hinausgehende Vorteile mit 2 zusätzlichen Vorteilen liefert:
- Reduzieren Sie die Wahrscheinlichkeit, ein eigenes Modul für einen Kunden zu schreiben, nur weil Sie einen Hook oder eine Formularänderungsfunktion benötigten, das kann jetzt auch mit ECA gemacht werden.
- Entfällt die Notwendigkeit für eine Reihe von Hilfsmodulen, die einfache Funktionen wie Weiterleitungen nach dem Login oder das Validieren, Entfernen, Beschneiden oder anderweitige Manipulieren bestimmter Felder bereitstellen.
Mit anderen Worten: Der Funktionsumfang von ECA ist riesig, und dennoch kann es die Komplexität jeder Drupal-Installation reduzieren. Gleichzeitig verbessert ECA die Transparenz und die Wartbarkeit, indem alle Regeln an einem Ort gespeichert werden, wo sie visualisiert, überprüft und sogar moderiert werden können, so dass alle Beteiligten ein besseres Verständnis dafür bekommen, was zu einem bestimmten Zeitpunkt implementiert und konfiguriert wird. Es erhöht auch die Zugänglichkeit für Benutzer, die die in einer Drupal-Site implementierte Geschäftslogik verstehen, aber nicht in der Lage oder willens sind, tief in die Drupal-Logik oder sogar in die Code-Basis einzutauchen.
Lassen Sie uns mit ECA weitermachen, es ist schon so weit, dass wir alle sehr aufgeregt und motiviert sind, es über die Ziellinie zu bringen. Beobachten Sie diesen Raum, um auf dem Laufenden zu bleiben - oder melden Sie sich auf drupal.org oder in Slack, wenn Sie entweder Ideen, Feature-Anfragen oder Ressourcen haben, um uns zu helfen, all dies zu tun.
Neuen Kommentar hinzufügen