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 around
plugin 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.