Wann sollten WordPress-Unteraktionen verwendet werden (und was sind sie?)
Ich habe kürzlich den Prozess der Verwendung des Konstruktors einer Klasse durchlaufen, um zu verhindern, dass ein Plugin funktioniert, wenn eine erwartete Abhängigkeit nicht geladen wird.
Obwohl ich diese spezielle Strategie nicht als Problem für eine einmalige Abhängigkeit oder in bestimmten Situationen betrachte, gibt es Möglichkeiten, wie dies zu Code-Smells führen kann.
Es hindert uns auch daran, eine native Funktion von Core namens WordPress-Unteraktionen zu verwenden:
https://twitter.com/JJJ/status/822265137935646720
Aber bevor ich mir Unteraktionen ansehe, möchte ich sicherstellen, dass mir klar ist, welche Probleme bei der Verwendung des bedingten Ansatzes (im Gegensatz zu Unteraktionen) mit Code-Smells brüten können.
WordPress-Unteraktionen
Es gibt viele Möglichkeiten, wie Codegerüche erklärt werden können, aber meine Lieblingsmethode kommt von Martin Fowler :
…Gerüche sind bestimmte Strukturen im Code, die auf eine Verletzung grundlegender Designprinzipien hinweisen und die Designqualität negativ beeinflussen.
Es gibt eine weitere großartige Seite über Code-Smells auf Source Making, die ich empfehle, zu lesen, wenn Sie die Möglichkeit haben.
Und die Art und Weise, wie Bedingungen zu Code-Smells führen können, ist einfach: Sie haben das Potenzial, Ihren Code mit einer riesigen Menge von Anweisungen zu übersäten, die viele class_exists- Prüfungen enthalten.
Und das ist ein Problem.
Jedes Mal, wenn Sie eine weitere Abhängigkeit in Ihren Code einführen, fügen Sie am Ende eine weitere bedingte Überprüfung hinzu, um zu sehen, ob eine Klasse in der WordPress-Anwendung vorhanden ist.
Ich glaube, es ist in Ordnung, dies mit einer einzigen Abhängigkeit zu tun – vielleicht sogar zwei Abhängigkeiten – und wenn Sie in Ihrer Architektur „hoch genug“ arbeiten, aber dies ist nicht der richtige Umgang mit vielen Abhängigkeiten oder auf einer niedrigeren Ebene in Ihr Plugin.
Hier kommen WordPress-Unteraktionen ins Spiel. Sie können eine Liste der Unteraktionen im Tweet über John oben sehen.
Es gibt auch eine offizielle Definition von Unteraktionen im bbPress Codex :
Diese internen Aktionen können als „Unteraktionen“ betrachtet werden und ermöglichen es Ihnen, WordPress-Aktionen nach Bedarf für Plugins, die von bbPress abhängen, hinzuzufügen oder neu anzuordnen.
Und Sie können ein Beispiel davon in dieser Datei sehen .
Sicher, diese Definition ist spezifisch für bbPress, aber das bedeutet nicht, dass sie nicht auf das anwendbar ist, was wir in WordPress tun.
Ein typisches Beispiel: Wenn Sie jemals do_action verwendet haben, um eine benutzerdefinierte Aktion zu definieren, oder Sie einen Hook genutzt haben, der von jemand anderem außerhalb des WordPress-Kerns bereitgestellt wurde, dann sind Sie mit der Strategie zum Implementieren einer Unteraktion vertraut.
Mit anderen Worten, WordPress-Unteraktionen sind einfach Aktionen, mit denen wir die Reihenfolge ändern können, in der unser Plugin von einem anderen Plugin abhängt.
Wie dies implementiert wird, kann im Kontext Ihrer Arbeit variieren, aber die beliebteste und „korrektste“ WordPress-Methode, dies zu tun, besteht wohl darin, das Prioritätsargument für das Laden Ihres Plugins auszunutzen.
Das heißt, nehmen Sie die Priorität der Abhängigkeit und stellen Sie sicher, dass sie früher ist, als Ihr Plugin aktiviert wird.
Es gibt alternative Methoden, die verwendet werden können, wie z. B. das Ändern des Plugin-Verhaltens, wann immer sie aktiviert sind oder nicht, aber dies geht über den Rahmen dieses speziellen Beitrags hinaus und kann die Benutzererfahrung (von WordPress im Allgemeinen, nicht weniger) negativ verändern.
Unabhängig davon ist der Punkt, dass Sie bei der Verwendung von WordPress-Unteraktionen, objektorientierter Programmierung und der Verwaltung von Abhängigkeiten von Drittanbietern sicherstellen müssen, dass die Entscheidungen, die Sie treffen, das Design Ihres Codes nicht beschädigen.
Wenn es sinnvoll ist, auf die Existenz einer Klasse zu prüfen, okay, aber wenn es sinnvoller ist, zu warten, bis eine Reihe von Klassen oder Plugins vor Ihren eigenen geladen wurden, dann sind WordPress-Unteraktionen wahrscheinlich sinnvoller.