Alasan yang jelas untuk menggunakan penulisan ulang alih-alih plugin adalah ketika Anda perlu mengganti metode pribadi, dilindungi atau final .
Tetapi pertimbangkan juga skenario berikut ini.
Skenario 1 (urutan sortir absolut):
Penulisan ulang dapat bermanfaat ketika Anda membutuhkan kode Anda untuk dijalankan sebelum plugin . Saya tahu Anda bisa melakukannya dengan mengatur plugin sortOrder
, tetapi Anda tidak bisa memastikan kode Anda akan selalu menjadi yang pertama ketika seseorang (bukan Anda) akan menginstal komponen pihak ke-3.
Skenario 2 (tidak termasuk kode):
Jika Anda perlu mengecualikan atau menulis ulang hanya sepotong kode dalam suatu metode, sebuah plugin bisa menjadi cara yang kurang optimal. Saya tahu Anda bisa menggunakan around
plugin dan menghindari memanggil proceed
, tetapi ini bisa merusak plugin lain di stack.
Skenario 3 (gaya kode):
Anda harus menggunakan penulisan ulang ketika Anda perlu menulis ulang suatu perilaku, plugin harus digunakan untuk memodifikasi output atau menjalankan kode sebelum / sesudah.
Sebuah plugin, harus selalu menjalankan kode asli untuk menghindari kerusakan modul lain.
Kesimpulan saya:
Jika Anda dapat mempertimbangkan metode inti sebagai kotak hitam dengan input dan satu output dan Anda agnostik tentang mekanisme internalnya, maka sebuah plugin bisa menjadi pilihan terbaik.
Jika Anda perlu mengubah perilaku internal , menulis ulang bisa menjadi pilihan terbaik.