Der offensichtliche Grund, ein Umschreiben anstelle eines Plugins zu verwenden, ist, wenn Sie eine private, geschützte oder endgültige Methode überschreiben müssen .
Beachten Sie aber auch die folgenden Szenarien.
1. Szenario (absolute Sortierreihenfolge):
Rewrites können nützlich sein, wenn Sie Ihren Code vor Plugins ausführen müssen . Ich weiß, dass Sie dies tun können, indem Sie das Plugin einstellen sortOrder, aber Sie können nicht sicher sein, dass Ihr Code immer der erste ist, wenn jemand (nicht Sie) Komponenten von Drittanbietern installiert.
2. Szenario (Code ausschließen):
Wenn Sie nur einen Teil des Codes in einer Methode ausschließen oder neu schreiben müssen , ist ein Plugin möglicherweise nicht optimal. Ich weiß, Sie können ein aroundPlugin verwenden und den Aufruf des vermeiden proceed, aber dies könnte andere Plugins im Stack beschädigen.
3. Szenario (Codestil):
Sie sollten Schreibungen verwenden , wenn Sie benötigen zu umschreiben ein Verhalten, Plugins sollte verwendet werden , die Ausgabe zu modifizieren oder Ausführen von Code vor / nach.
Ein Plugin sollte immer den Originalcode ausführen , um zu vermeiden, dass andere Module beschädigt werden.
Meine Schlussfolgerung:
Wenn Sie eine Kernmethode als Black Box mit einer Eingabe und einer Ausgabe betrachten und sich nicht mit den internen Mechanismen auskennen, ist ein Plug-in die beste Option.
Wenn Sie ein internes Verhalten ändern müssen , ist ein Umschreiben möglicherweise die beste Option.