Best Practice für das Erstellen von Modulen mit Klassen


19

Ich versuche, meine Module jetzt als Klassen zu erstellen, in denen Lazy / Auto-Load in Drupal 7 enthalten ist, und ich würde mir gerne einige Module (Contrib oder Core) ansehen, die einen großartigen Job machen.

Gibt es eine kreative Möglichkeit, eine Klasse als Hooks zu integrieren? Implementiere ich jede Funktion als ctools-Plugin?

Passanten sollten beachten, dass D7 neue files[]Deklarationen in Moduldateien .infofür Klassen / Interfaces zum automatischen / verzögerten Laden hat: Schreiben von .info-Dateien (Drupal 7.x) .

Das Folgende ist eine gute Lektüre, um die Motivationen und die Konstitution (sozusagen) der Drupal-Community Drupal-Programmierung aus einer objektorientierten Perspektive zu erhalten .

Antworten:


16

Ein Modul ist keine Klasse von Crell, die Sie zuerst lesen sollten.

Der größte OOP-Teil in Drupal 7 ist die neue Datenbankabstraktionsschicht (von Crell und anderen entwickelt). Das implementiert viele Muster, die wiederverwendet werden können und sollten.

Beispielsweise:

Was immer noch kontrovers diskutiert wird, ist das Verbergen von Informationen . DBTNG implementiert dies, indem Klasseneigenschaften geschützt werden und der direkte Zugriff nicht zugelassen wird. Andererseits haben wir hook_query_alter () und sie können mit verschiedenen Referenz-Getter- Methoden fast frei geändert werden.


Tolle Antwort, Unmengen an nützlichen Ressourcen, um mein Denken bei der Strukturierung meines Modulcodes auf den neuesten Stand zu bringen!
Electblake

3

Das ist eine interessante Frage.

Die Idee eines Drupal-Moduls als Klasse ist sehr interessant. Selbst in D7-Modulen implementieren Sie einfach Hook-Funktionen, die namentlich geprüft werden. Selbst wenn Sie eine Klasse für Ihr Modul erstellen, müssen Sie Hook-Funktionen implementieren, um sie aufzurufen.

Viele Module verwenden Klassen jedoch intern und stellen die Funktionalität über diese Klassen zur Verfügung. Das offensichtlichste Beispiel sind Ansichten. Das könnte also ein guter Ort sein, um nachzuschauen. Beachten Sie jedoch, dass viele Module Klassen auf ihre eigene Weise verwenden, sodass das, was Sie aus der Betrachtung von Ansichten lernen, möglicherweise nicht immer anwendbar ist.


Vielen Dank für die Einsicht, und ich nahm an, dass ich immer noch hook_functions benötigen würde, um mich ordnungsgemäß in Drupal zu registrieren, aber ich bin gespannt, wie Module dies implementieren. Ich werde einen Blick auf das Ansichtenmodul werfen (und hoffentlich nicht verloren gehen) - bitte aktualisieren Sie Ihre Antwort, wenn Sie weitere Einzelfälle / Beispiele für Muster finden, die Sie finden: D
electblake

2

Mit der Entity-API (dem Contrib-Modul) können Sie für jeden Ihrer Entitätstypen eine "Entitätsklasse" deklarieren, sodass der gesamte Code, der sich auf Ihre Entität bezieht (Erstellen, Laden, Speichern, Zugriff usw.), in eine Klasse aufgenommen werden kann (siehe Organic) Gruppen macht es zum Beispiel).

Das heißt, übertreib es nicht. ctools-Plugins sind eine gute Sache, wenn Sie sie brauchen (Sie schreiben die nächsten Views, Panels oder Rules), aber Klassen überall nur aus Gründen der ideologischen Reinheit zu verwenden, hilft Ihnen nicht viel.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.