O motivo óbvio para usar uma reescrita em vez de um plug-in é quando você precisa substituir um método privado, protegido ou final .
Mas também considere os seguintes cenários.
1º cenário (ordem de classificação absoluta):
As regravações podem ser úteis quando você precisar que seu código seja executado antes dos plug-ins . Eu sei que você pode fazer isso configurando o plug-in sortOrder
, mas não pode ter certeza de que seu código será sempre o primeiro quando alguém (não você) instalará componentes de terceiros.
Segundo cenário (excluir código):
Se você precisar excluir ou reescrever apenas um pedaço de código em um método, um plug-in pode ser uma maneira abaixo do ideal. Eu sei que você pode usar um around
plug - in e evitar chamar o proceed
, mas isso pode quebrar outros plug-ins na pilha.
Terceiro cenário (estilo de código):
Você deve reescrever quando precisar reescrever um comportamento; os plug-ins devem ser usados para modificar a saída ou executar o código antes / depois.
Um plug-in deve sempre executar o código original para evitar a quebra de outros módulos.
Minha conclusão:
Se você pode considerar um método principal como uma caixa preta com uma entrada e uma saída e não souber sobre seus mecanismos internos, um plug-in pode ser a melhor opção.
Se você precisar alterar um comportamento interno , uma reescrita pode ser a melhor opção.