Rayapan kelas kekal sebagai ancaman utama yang ditimbulkan oleh fasad
P粉155710425
P粉155710425 2024-03-22 00:04:36
0
1
342

Saya sedang membaca Laravel Facades 时想到了这句话,Facade 的主要危险是类范围 Creep. Ini perenggan kedua, berikut adalah pautan https://laravel.com/docs/6.x/facades#when-to-use-facades

Apakah maksud merayap skop kelas?

Saya tidak dapat mencari sebarang sumber untuk memahami creep skop kelas.

P粉155710425
P粉155710425

membalas semua(1)
P粉935883292

Jawapan kepada soalan anda sebenarnya diberikan dalam ayat seterusnya, namun, saya akui saya sangat keliru apabila mula menggunakan Laravel. Jadi pada asasnya:

Ini bermakna penggunaan fasad terlalu banyak (bukan hanya dalam Laravel, tetapi secara umum) boleh menjadikan kod anda lebih kembung dan sukar dibaca. (menewaskan perkara di sebalik mengapa anda perlu menggunakan rupa)

Fasad juga boleh berubah menjadi banyak perkara di luar tujuan asalnya, dan seperti yang dikatakan oleh Refactoring Guru (tiada gabungan), fasad - jika digunakan secara salah - boleh menjadi objek tuhan. p>

Jika anda akan menggunakan fasad dan masih tidak tahu cara menggunakannya, saya syorkan anda membaca Prinsip Tanggungjawab Tunggal dan (pendapat terdahulu) Apabila ragu-ragu, jangan gunakan fasad.

Contoh

Bahagian ini sebenarnya adalah panduan "Jangan Lakukan Ini", untuk bacaan pantas So, Don't Do This! ” Pembaca, jangan lakukan ini!

Saya menyunting jawapan saya untuk menambah contoh yang agak tidak masuk akal tentang penggunaan fasad secara berlebihan dalam dua cara berbeza.

  1. Anda sedar bahawa fasad benar-benar menyelesaikan kesakitan corak suntikan pergantungan, siapa yang mahu bimbang tentang semua perkara itu dengan skop, statik dan sifat? Jadi anda mula menggunakan fasad pada segala-galanya. Adakah saya perlu menambah tempat pada pertanyaan sebelumnya? mudah! Buat rupa untuknya dan namakannya Scope::where($model, $column, $equals),想要与数据库对话,但 DB::query 刚刚开始太长? Facades 为您提供支持,将它们放入 DataModel::longQuery() 中并在任何地方使用它们。厌倦了一直调用 ProductResource::collection 吗?将其放入名为 Resource::collection($model) dalam rupa baharu.

  2. Anda menambah fasad untuk membantu anda menjana pautan pembayaran, jadi anda hanya memanggilnya dalam kaedah Payment 并最初将其与 Payment::generateLink() 一起使用,之后一段时间后,您会发现您还需要为网站内支付小部件生成视图,因此您添加了一个 Payment::view(),几个月后,当您需要与您的支付提供商讨论您的发票历史记录,只需将其添加到 Payment::getReceipts. Fasad pembayaran anda kini merupakan satu kelas gergasi yang mengendalikan terlalu banyak perkara yang tidak berkaitan di tempat yang sama.

Dalam kedua-dua contoh, anda boleh melihat dengan jelas penggunaan penampilan yang berlebihan melalui kesilapan pengekodan biasa. Walaupun contoh saya agak keterlaluan, saya rasa mudah untuk membayangkan bagaimana perkara ini boleh berlaku dalam kehidupan sebenar dalam tempoh beberapa bulan.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan