Skip to Content
StudioExtensionsArchitektur

Architektur

Das Studio basiert auf der Charon-Architektur — einem Manager/Mediator-Pattern, das Business-Logik sauber von der UI trennt. Dieses Kapitel beschreibt die Architektur und wie Extensions sich darin einbetten.

Charon-Architektur: Manager & Mediatoren

Die Kern-Architektur folgt einer klaren Schichtenstruktur:

  • Manager (charon/common/) — Plattformunabhängige Services, die State und Business-Logik besitzen
  • Mediatoren (charon/browser/) — Brücke zwischen Managern und React-UI-Komponenten
  • Extensions — Registrieren sich über die Studio-API (ein Subset von Charon) bei den Mediatoren

Extensions interagieren ausschließlich über die Studio-Klasse (SDK) mit der Anwendung. Die internen Manager und Mediatoren sind nicht direkt zugänglich.

Extension-Lifecycle

Jede Extension durchläuft einen definierten Lebenszyklus:

Drei Lade-Wege

Extensions können auf drei Arten geladen werden:

TypBeschreibungVerwendung
PackagedIn der App enthaltene ExtensionsEingebaute Extensions (z.B. bpmn-editor, settings)
Dynamic (URI)Von einer Datei-URI geladenExterne Extensions im Dateisystem
Dynamic (Object)Programmatisch als JS-ObjektZur Laufzeit registrierte Extensions

Externe Extensions werden mit dem CLI-Flag --extension-development-dir geladen:

/Applications/ProcessCube\ Studio.app/Contents/MacOS/ProcessCube\ Studio \ --extension-development-dir "/pfad/zur/extension"

Studio-API: Klassendiagramm

Die Studio-Klasse ist der zentrale Einstiegspunkt für Extension-Entwickler. Sie bietet Zugriff auf alle Funktionsbereiche:

Funktionsbereiche

BereichAPIZweck
Kommandosstudio.commandsAktionen registrieren und ausführen
Editorenstudio.editorsDokumenttypen, Öffnen, Speichern
Menüsstudio.menus, studio.menuBarKontext- und Anwendungsmenüs
Panesstudio.panesSeitenpanels (links, unten, rechts)
Activity Barstudio.activityBarIcons in der linken Seitenleiste
Status Barstudio.statusBarStatusleiste am unteren Rand
Einstellungenstudio.settingsKonfigurationswerte lesen/schreiben
Dialogestudio.dialog, studio.notificationsBenutzerinteraktion
Dateienstudio.filesDatei-I/O-Operationen
Enginesstudio.enginesProcessCube-Engine-Verbindungen
Eventsstudio.eventsEvent-basierte Kommunikation
Iconsstudio.iconsIcon-Registrierung
Umgebungstudio.envApp-Version, OS, Client-Typ

Sequenzdiagramm: Editor-Dokument

Das Zusammenspiel beim Registrieren und Öffnen eines eigenen Editor-Dokuments:

Model-Renderer-Trennung

Jeder Editor-Dokumenttyp besteht aus zwei Teilen:

  • Model (EditorDocumentModel) — Besitzt die Daten und Business-Logik. Reagiert auf Lifecycle-Events (Save, Close, Focus, Blur). Bietet Undo/Redo.
  • Renderer (React-Komponente) — Stellt die UI dar. Erhält das Model über Props. Aktualisiert sich bei Datenänderungen.

UI-Bereiche der Anwendung

Die Benutzeroberfläche des Studios ist in klar definierte Bereiche unterteilt. Extensions können jeden dieser Bereiche erweitern:

Zuordnung: UI-Bereich → API

UI-BereichAPIRegistrierung
Menu Barstudio.menuBarregisterMenuBarModifier()
Activity Barstudio.activityBarregisterActivityBarItem(area, id, factory)
Editor-Flächestudio.editorsregisterDocumentType(id, config)
Panes (links)studio.panesregisterPaneGroup('left', id, panes)
Panes (rechts)studio.panesregisterPaneGroup('right', id, panes)
Panes (unten)studio.panesregisterPaneGroup('bottom', id, panes)
Status Barstudio.statusBarregisterStatusBarItem(area, id, factory)
Kontextmenüsstudio.menusregisterMenu(id, factory)
Command Palettestudio.commandsregisterInCommandSearch(id, label, callback)

Nächste Schritte