Oczywistym powodem użycia przepisywania zamiast wtyczki jest to, że musisz zastąpić prywatne, chronione lub końcowe metody .
Ale rozważ także następujące scenariusze.
Pierwszy scenariusz (bezwzględna kolejność sortowania):
Przepisywanie może być przydatne, gdy chcesz uruchomić kod przed wtyczkami . Wiem, że możesz to zrobić, ustawiając wtyczkę sortOrder
, ale nie możesz być pewien, że Twój kod zawsze będzie pierwszy, gdy ktoś (nie ty) zamierza zainstalować komponenty innych firm.
Drugi scenariusz (wyklucz kod):
Jeśli chcesz wykluczyć lub przepisać tylko fragment kodu w metodzie, wtyczka może być nieoptymalnym sposobem. Wiem, że możesz użyć around
wtyczki i uniknąć wywoływania proceed
, ale może to uszkodzić inne wtyczki na stosie.
Scenariusz trzeci (styl kodu):
Powinieneś używać przepisywania, gdy musisz przepisać zachowanie, wtyczki powinny być używane do modyfikowania danych wyjściowych lub uruchamiania kodu przed / po.
Wtyczka powinna zawsze uruchamiać oryginalny kod, aby uniknąć uszkodzenia innych modułów.
Mój wniosek:
Jeśli możesz rozważyć podstawową metodę jako czarną skrzynkę z wejściem i jednym wyjściem, a ty jesteś agnostyczny w zakresie jej wewnętrznych mechanizmów, wtyczka może być najlepszą opcją.
Jeśli chcesz zmienić zachowanie wewnętrzne , najlepszym rozwiązaniem może być przepisanie.