Il motivo ovvio per utilizzare una riscrittura anziché un plug-in è quando è necessario sovrascrivere un metodo privato, protetto o finale .
Ma considera anche i seguenti scenari.
1 ° scenario (ordinamento assoluto):
Le riscritture possono essere utili quando è necessario eseguire il codice prima dei plug-in . So che puoi farlo impostando il plugin sortOrder
, ma non puoi essere sicuro che il tuo codice sarà sempre il primo quando qualcuno (non tu) installerà componenti di terze parti.
2 ° scenario (escludi codice):
Se è necessario escludere o riscrivere solo una parte di codice in un metodo, un plug-in potrebbe essere un modo non ottimale. So che puoi usare un around
plugin ed evitare di chiamare il proceed
, ma questo potrebbe spezzare altri plugin nello stack.
3 ° scenario (stile codice):
Dovresti usare la riscrittura quando devi riscrivere un comportamento, i plugin dovrebbero essere usati per modificare l'output o eseguire il codice prima / dopo.
Un plugin, dovrebbe sempre eseguire il codice originale per evitare la rottura di altri moduli.
La mia conclusione:
Se puoi considerare un metodo di base come una scatola nera con un input e un output e sei agnostico riguardo ai suoi meccanismi interni, allora un plug-in potrebbe essere l'opzione migliore.
Se è necessario modificare un comportamento interno , una riscrittura potrebbe essere l'opzione migliore.