La raison évidente d'utiliser une réécriture au lieu d'un plugin est lorsque vous devez remplacer une méthode privée, protégée ou finale .
Mais considérez également les scénarios suivants.
1er scénario (ordre de tri absolu):
Les réécritures peuvent être utiles lorsque vous avez besoin que votre code soit exécuté avant les plugins . Je sais que vous pouvez le faire en configurant le plugin sortOrder, mais vous ne pouvez pas être sûr que votre code sera toujours le premier lorsque quelqu'un (pas vous) va installer des composants tiers.
2ème scénario (exclure le code):
Si vous avez besoin d'exclure ou de réécrire juste un morceau de code dans une méthode, un plugin pourrait être un moyen sous-optimal. Je sais que vous pouvez utiliser un aroundplugin et éviter d'appeler le proceed, mais cela pourrait casser d'autres plugins dans la pile.
3e scénario (style de code):
Vous devez utiliser les réécritures lorsque vous devez réécrire un comportement, les plugins doivent être utilisés pour modifier la sortie ou exécuter le code avant / après.
Un plugin, devrait toujours exécuter le code d'origine pour éviter de casser d'autres modules.
Ma conclusion:
Si vous pouvez considérer une méthode principale comme une boîte noire avec une entrée et une sortie et que vous êtes agnostique quant à ses mécanismes internes, alors un plugin pourrait être la meilleure option.
Si vous devez modifier un comportement interne , une réécriture pourrait être la meilleure option.