Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

Kernel, lib und Erweiterungen: die Schichtung

Die Abhängigkeitsregeln zwischen lib/, kernel/classes, kernel/private, den Modul-Controllern, den Designs und Erweiterungen - welche Schicht welche aufrufen darf, wo die Regeln noch nicht erfüllt sind, wie Namen zeigen…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/software-engineers/kernel-lib-and-extensions.md

On this page

This page is a translation. Read the English original

Kernel, lib und Erweiterungen: die Schichtung

Diese Seite richtet sich an Ingenieure, die entscheiden, wohin Code gehört, und prüfen, ob eine Änderung die Grenzen einhält. Die Regeln stammen aus Regeln zu Schichtung und Benennung, das auch jeden bekannten Verstoß auflistet.

Inhalt

  1. Die Schichten und die Richtung der Aufrufe
  2. Was jede Schicht darf
  3. Wo die Regeln nicht erfüllt sind
  4. Namen verraten die Schicht
  5. Wohin ein neues Stück Code gehört

Die Schichten und die Richtung der Aufrufe

 extension/<name>/          plugins: settings, modules, designs, classes, cronjobs
 design/<design>/templates  presentation: reads data through fetch functions and operators only
 kernel/<module>/           controllers: module.php, view entry files, function_definition.php
 kernel/private/            internal API: ezpKernel, views, commands, cronjobs, services, REST, ezpEvent
 kernel/classes/            domain: content, users, roles, datatypes, workflows, caches, persistence
 lib/                       generic libraries: eZDB, eZINI, eZTemplate, eZFile, eZSys, eZModule, sessions

Eine Schicht darf die Schichten unter ihr aufrufen. Aufrufe nach oben sind Ausnahmen, und neue sollten nicht hinzukommen.

Was jede Schicht darf

SchichtDarfDarf nicht
lib/Infrastruktur liefern, die nichts von Inhalten weißvon einem Modul oder einem Design abhängen; neuer Code sollte nicht von kernel/ abhängen
kernel/classes/Inhalte, Benutzer, Rollen, Datentypen, Workflows, Caches modellierenSeiten rendern oder Anfrageeingaben lesen; sie nimmt Werte und gibt Objekte zurück
kernel/<module>/ und View-KlassenEingaben über eZHTTPTool lesen, die Domäne aufrufen, über eZTemplate rendernselbst HTML ausgeben, außer Downloads und JSON
kernel/private/den Kernel von Anfang bis Ende besitzen: Kernel-Handler, Views, Befehle, Cronjob-Teile, Dienste, RESTals stabile API für Erweiterungen behandelt werden; ihre Signaturen können sich ändern
design/Daten darstellen, Ausgaben mit |wash maskierendie Datenbank abfragen; in den Administrationsdesigns Inline-CSS oder Inline-Skripte enthalten
extension/alles darunter über dokumentierte Erweiterungspunkte verwendenÄnderungen an Kernel-Dateien verlangen

Arbeit, die sich eine View, ein Befehl und ein Cronjob-Teil teilen, gehört in eine Dienstklasse in kernel/private/classes/services/ (Namensraum Exponential\Service), nicht in einen von ihnen (Befehle, Cronjob-Teile und Modul-Views als Klassen).

Wo die Regeln nicht erfüllt sind

Der Standard hält diese offen fest; behandeln Sie sie als Schulden, nicht als Präzedenzfall:

  • Mehrere Dateien in lib/ rufen Kernel-Klassen auf (eZUser, eZClusterFileHandler, eZPersistentObject). Behandeln Sie lib/ als "tiefer als der Kernel", nicht als unabhängige Bibliothekssammlung.
  • Einige wenige View-Klassen lesen $_POST oder $_GET noch direkt statt über eZHTTPTool.
  • ezpEvent ist als private API dokumentiert, dennoch verlassen sich Erweiterungen darauf.
  • Views, Cronjob-Teile und Befehle als einfache Dateien laufen noch neben der klassenbasierten Form.

Siehe Mit technischen Schulden umgehen, wie solche Punkte festgehalten und abgebaut werden.

Namen verraten die Schicht

NameSchicht
eZ*, ezp* (eZContentObject, ezpKernelWeb)geerbter Kernel- und Bibliothekscode; nie umbenannt
exp* (expContentSecurityPolicy, expAuditConfig)Code, der seit der Umbenennung des Produkts hinzukam; neuer Kernel-Code verwendet exp
Exponential\View\Kernel\..., Exponential\Command\Kernel\..., Exponential\Cronjob\Kernel\...klassenbasierte Views, Befehle und Cronjob-Teile des Kernels
Exponential\Command\Extension\<Ext>, Exponential\View\Extension\<Ext>\<Module>dasselbe für eine Erweiterung
sevenx*das öffentliche PHP-Präfix von 7x, von einigen Erweiterungen verwendet (Die Präfixregel)

Eine Klasse je Datei, und der Dateiname ist der Klassenname in Kleinbuchstaben: expContentSecurityPolicy liegt in expcontentsecuritypolicy.php. Erzeugen Sie nach dem Hinzufügen oder Umbenennen einer Klasse die Klassenzuordnungen neu (php bin/php/ezpgenerateautoloads.php -e; -k für den Kernel).

Wohin ein neues Stück Code gehört

Sie schreibenLegen Sie es ab in
Eine Funktion für eine Installation oder ein wiederverwendbares Plugineine Erweiterung: extension/<ext>/ (Aufbau einer Erweiterung)
Ein neues Kernel-Subsystemkernel/classes/<subsystem>/ für die Domäne, kernel/private/classes/ für Views, Befehle und Dienste
Infrastruktur ohne Wissen über Inhaltelib/, ohne neue Abhängigkeiten zum Kernel
Eine Seiteeine Modul-View: eine Unterklasse von ModuleView plus ihr Template
Eine Einstellungihren Standard mit einem Kommentar in settings/<file>.ini, gelesen über eZINI
Text, der Benutzern gezeigt wirdezpI18n::tr( $context, $text ) in PHP, i18n( $context ) in Templates

Verwandte Seiten

Werden Sie Exponential-Partner

Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x