Очевидною причиною використання переписати замість плагіна є те, коли вам потрібно перекрити приватний, захищений або остаточний методи .
Але також врахуйте наступні сценарії.
1-й сценарій (абсолютний порядок сортування):
Переписування може бути корисно, коли вам потрібно запустити код перед плагінами . Я знаю, що ви можете це зробити, встановивши плагін sortOrder
, але ви не можете бути впевнені, що ваш код завжди буде першим, коли хтось (не ви) збирається встановити сторонні компоненти.
2-й сценарій (виключаємо код):
Якщо вам потрібно виключити або переписати лише фрагмент коду в методі, плагін може бути неоптимальним способом. Я знаю, що ви можете використовувати around
плагін і уникати виклику proceed
, але це може зламати інші плагіни у стеку.
3-й сценарій (стиль коду):
Ви повинні використовувати перезапис , коли вам потрібно переписати поведінку, плагіни повинні бути використані для зміни вихідного або виконання коду перед / після.
Плагін завжди повинен запускати оригінальний код, щоб уникнути зламу інших модулів.
Мій висновок:
Якщо ви можете розглянути основний метод як чорну скриньку з входом і одним виходом, і ви агресивно ставитеся до його внутрішніх механізмів, то плагін може бути найкращим варіантом.
Якщо вам потрібно змінити внутрішню поведінку , переписання може бути найкращим варіантом.