Frage

Dies ist ein Follow-up zu einer vorherigen Frage . wenn ich mehrere plugins / Züge mit around Modifikatoren haben, ist es möglich, eine bestimmte Ausführungsreihenfolge (da, wie ich nicht sicher sein können, die tatsächlich geladen werden werden) zu gewährleisten? oder kann ich wirklich nur, dass Kontrolle in Code, den ich schreibe und mit der Dokumentation?

Beispiel: Ich habe 3 Rollen mit je einem around und kann jeweils optional als ein Trait , aber wenn mehr als 1 ist sie in einer bestimmten Reihenfolge zu arbeiten direkt zusammen geladen werden muß geladen geladen werden. z.B. Laden Trait A B C in dieser Reihenfolge mit der Arbeit in Ordnung, aber es wie Trait B A C Laden wird in wackelig Verhalten führen.

Gibt es eine Möglichkeit ich den Benutzer verhindern kann (Programmierer) von ihnen in der falschen Reihenfolge geladen werden.

War es hilfreich?

Lösung

Kurze Antwort ist „Nein“. Während Verfahren Modifikatoren geordnet sind, Rollen sind ungeordnete natürlich zusammen. Dieser Konflikt der Zusammensetzung ist einer der Gründe, Methode Modifikatoren in Rollen behaftet ist mit Gefahr und man es selten für etwas komplexer in der freien Natur sehen verwendet wird.

Benutzer sind auch, besonders bekannt ungeordnete für sein. Moose bieten einige Werkzeuge, um die geordnete Zusammensetzung von Rollen zu erzwingen (von Design). Es ist sicherlich nichts im User-Space, die sie zwingen werden.

sagte, dass, können Sie Ether Vorschlag in einer anderen Antwort verwenden, eine Meta-Trait schaffen, die in der richtigen Reihenfolge der Merkmale besteht zusammensetzt. Alternativ können Sie das kalte Wasser und neu schreiben die Rolle Zusammensetzung Stücke Moose zu garantieren bestellte Zusammensetzung abspringen. Ich kann ehrlich nicht eine dieser beiden Ansätze empfehlen, beide scheinen, was mir Verputzen über würde ein deutliches Zeichen für schlechtes Design sein.

Ohne mehr über Ihr Problem zu wissen, kann ich nicht eine bessere Lösung obwohl vorschlagen. Ich würde aussehen allgemein für so etwas wie einen Rückruf zu registrieren und Auslösen, dass irgendwie, anstatt sich auf Verfahren Modifikatoren.

Andere Tipps

Moose :: Handbuch :: MethodModifiers (rechts vor WARUM sIE?).

  

Wenn es mehr Modifikatoren   die gleiche Art, die vor und um   Modifikatoren laufen aus dem letzten hinzugefügt   die erste und nach Modifikatoren laufen   vom ersten bis zum letzten hinzugefügt:

     

vor 2
  vor 1 |   rund 2
  um 1 |   Primär
  um 1 |   rund 2
  nach 1 |   nach 2

Die Idee ist, dass Sie die Methode modifizieren, wie es in diesem Moment existiert .

  

Gibt es eine Möglichkeit ich den Benutzer verhindern kann (Programmierer) von ihnen in der falschen Reihenfolge geladen werden.

Dies ist eine sehr subjektive Antwort und ist abhängig von der Architektur des Systems, mit dem Sie nicht beschrieben haben. Aber eine Art und Weise ist, dass Sie die Rollen anwenden könnten „selbst“ in einer anderen Rolle, die dann auf die Klasse allein angewandt wird:

package OmniRole;
use Moose::Role;

with 'RoleA',' RoleB', 'RoleC';  # these roles contain the 'around' method modifier


package User::Class;
use Moose;

with 'OmniRole';    # wraps method 'foo' several times to do magic.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top