


Bagaimana untuk melaksanakan prinsip -prinsip pepejal dalam projek Laravel?
Jul 30, 2025 am 04:23 AMPrinsip Tanggungjawab Tunggal: Setiap kelas harus mempunyai satu tanggungjawab, jadi gerakkan logik perniagaan ke kelas perkhidmatan, gunakan permintaan borang untuk pengesahan, dan mengendalikan kesan sampingan melalui peristiwa atau pekerjaan. 2. Prinsip Terbuka/Tertutup: Memperluas fungsi tanpa mengubah kod sedia ada dengan menggunakan antara muka dan suntikan ketergantungan, seperti mengikat gerbang pembayaran yang berbeza dalam bekas perkhidmatan Laravel. 3. Prinsip Penggantian Liskov: Memastikan kelas kanak -kanak mengekalkan kontrak tingkah laku ibu bapa mereka, mengelakkan parameter atau ketidakkonsistenan tingkah laku dalam kaedah yang ditindas. 4. Prinsip Pengasingan Antara Muka: Buat antara muka kecil yang terfokus seperti UserFinder dan UserUpdater supaya pelanggan hanya bergantung pada kaedah yang mereka gunakan, meningkatkan modularity. 5. Prinsip Penyongsangan Ketergantungan: Bergantung pada abstraksi dengan menyuntik antara muka ke dalam modul peringkat tinggi, yang membolehkan pengikatan fleksibel pelaksanaan melalui bekas IOC Laravel. Memohon prinsip -prinsip ini dalam Laravel meningkatkan kebolehpercayaan, skalabilitas, dan kesesuaian dengan mempromosikan pemisahan kebimbangan dan mengurangkan gandingan, akhirnya menghalang pengawal dan model daripada menjadi monolitik.
Prinsip-prinsip pepejal adalah konsep reka bentuk berorientasikan objek asas yang membantu mewujudkan kod yang boleh dipelihara, berskala, dan boleh diuji. Laravel, yang menjadi rangka kerja PHP moden yang dibina di atas komponen simfoni, memberikan sokongan yang sangat baik untuk melaksanakan prinsip -prinsip ini. Berikut adalah cara anda boleh memohon setiap prinsip pepejal dalam projek Laravel.

1. Prinsip Tanggungjawab Tunggal (SRP)
Kelas sepatutnya hanya mempunyai satu sebab untuk berubah.
Di Laravel, adalah perkara biasa untuk melihat pengawal atau model kembung yang terlalu banyak - mengendalikan logik HTTP, logik perniagaan, pertanyaan pangkalan data, dan juga menghantar e -mel.

Cara Memohon SRP:
- Pindahkan logik perniagaan daripada pengawal dan model.
- Gunakan kelas perkhidmatan untuk logik perniagaan.
- Gunakan kelas permintaan borang untuk pengesahan.
- Gunakan acara/pendengar atau pekerjaan untuk kesan sampingan (contohnya, menghantar e -mel).
Contoh:

// App/Services/userregistrationservice.php kelas userregistrationservice { Daftar Fungsi Awam (array $ data): Pengguna { $ user = user :: create ($ data); Acara (baru UsErregistered ($ user)); pulangan $ pengguna; } }
Kemudian di pengawal anda:
Kedai Fungsi Awam (Permintaan $ userregistrationRequest $, perkhidmatan userregistrationservice $) { $ user = $ service-> register ($ request-> validated ()); kembali redirect ()-> route ('users.show', $ user); }
Ini menjadikan pengawal ringan dan mewakilkan tanggungjawab dengan sewajarnya.
2. Prinsip Terbuka/Ditutup (OCP)
Kelas harus dibuka untuk lanjutan, tetapi ditutup untuk pengubahsuaian.
Ini bermakna anda harus dapat menambah fungsi baru tanpa menukar kod sedia ada.
Cara Memohon OCP di Laravel:
- Gunakan antara muka dan suntikan pergantungan .
- Leverage Container Service Laravel untuk mengikat pelaksanaan.
Contoh:
// Tentukan antara muka Antara muka PaymentGateway { Caj Fungsi Awam (Float $ Amaun): BOOL; } // Laksanakan untuk jalur Kelas Stripepayment melaksanakan PaymentGateway { / * ... * /} // Laksanakan untuk PayPal Kelas PayPalPayment melaksanakan PaymentGateway { / * ... * /}
Mengikat pembekal perkhidmatan:
$ this-> app-> bind (paymentGateway :: class, stripepayment :: class);
Sekarang anda boleh menukar pelaksanaan tanpa menukar kelas yang memakan:
Kelas CheckOutController { Fungsi awam __Construct (PaymentGateway $ Gateway) {} Bayar fungsi awam (permintaan $ permintaan) { $ this-> gateway-> caj ($ permintaan-> amaun); // tiada perubahan kod yang diperlukan jika anda beralih ke paypal kemudian } }
Anda boleh melanjutkan fungsi dengan menambah gerbang baru, tidak mengubah suai yang sedia ada.
3. Prinsip Penggantian Liskov (LSP)
Subtipe mesti digantikan untuk jenis asas mereka.
Jika anda menggunakan warisan (contohnya, memanjangkan kelas), pastikan kelas kanak -kanak tidak memecahkan tingkah laku yang diharapkan dari ibu bapa.
Cara mengikuti LSP di Laravel:
- Elakkan kaedah utama dengan cara yang mengubah kontrak mereka.
- Jangan melemahkan prasyarat atau mengukuhkan postconditions dalam kelas kanak -kanak.
Contoh: Jika anda mempunyai kelas NotificationSender
Base, pastikan semua kanak -kanak (misalnya, EmailSender
, SmsSender
) berkelakuan diramalkan apabila send()
dipanggil.
Elakkan:
smssender kelas memanjangkan pemberitahuan { Fungsi Awam Hantar ($ mesej, $ e -mel) // Mengharapkan e -mel, tetapi kami menghantar SMS? { // Penggunaan parameter yang tidak sah - melanggar LSP } }
Sebaliknya, reka bentuk antara muka yang konsisten.
4. Prinsip Pengasingan Antara Muka (ISP)
Pelanggan tidak boleh dipaksa bergantung pada antara muka yang mereka tidak gunakan.
Daripada antara muka yang besar, generik, buat yang lebih kecil, spesifik.
Cara Memohon ISP di Laravel:
- Jangan buat satu antara muka repositori yang besar dengan setiap kaedah.
- Antara muka berpecah dengan menggunakan kes.
Contoh:
Interface UserFinder { fungsi awam findById (int $ id) :? pengguna; fungsi awam findByemail (String $ e -mel) :? pengguna; } Antara muka UserUpdater { kemas kini fungsi awam (pengguna $ pengguna, array $ data): bool; }
Sekarang perkhidmatan yang hanya perlu mencari pengguna hanya bergantung pada UserFinder
, bukan pada kaedah kemas kini yang tidak digunakan.
Anda masih boleh melaksanakan kelas kedua -duanya:
kelas eloquentuserrepository melaksanakan userfinder, userupdater { // Melaksanakan kedua -duanya }
Tetapi pengguna hanya bergantung pada apa yang mereka perlukan.
5. Prinsip Penyongsangan Ketergantungan (DIP)
Bergantung pada abstraksi, bukan pada konkrit.
Modul peringkat tinggi (seperti pengawal atau perkhidmatan) tidak boleh bergantung secara langsung pada butiran peringkat rendah (seperti model fasih atau API tertentu).
Cara Memohon Dip di Laravel:
- Gunakan antara muka dan bekas IOC Laravel .
- Suntikan kebergantungan dan bukannya instantiating mereka.
Contoh:
Kelas UserController memanjangkan pengawal { fungsi awam __construct (pelindung userfinder $ finder) {} Pertunjukan Fungsi Awam ($ ID) { $ user = $ this-> finder-> findById ($ id); pulangan paparan ('users.show', compact ('user')); } }
Mengikat pelaksanaan:
// appserviceProvider.php Daftar Fungsi Awam () { $ this-> app-> bind (userfinder :: class, eloquentuserrepository :: class); }
Sekarang pengawal tidak peduli bagaimana pengguna dijumpai - hanya yang dapat dijumpai.
Petua Bonus untuk Laravel
- Gunakan tindakan atau tugas : Untuk operasi yang kompleks, pertimbangkan untuk menggunakan kelas tindakan tunggal (misalnya,
CreateOrderAction
) untuk memastikan perkara yang sesuai dengan SRP. - Pekerjaan dan pendengar Leverage : Kesan sampingan offload (contohnya, pemberitahuan, pembalakan) kepada pekerjaan beratur atau pendengar acara.
- Perkhidmatan Repositori : Gunakan repositori untuk akses data abstrak, dan perkhidmatan untuk mengatur logik.
- Elakkan fasad dalam logik perniagaan : lebih suka suntikan ketergantungan ke atas fasad untuk kesesuaian dan kejelasan.
Pemikiran terakhir
Memohon pepejal di Laravel bukan mengenai peraturan yang ketat - ini mengenai menulis kod yang lebih mudah untuk diuji, berubah, dan skala. Senibina Laravel (bekas perkhidmatan, kontrak, acara, pekerjaan) menjadikannya semulajadi untuk mengikuti prinsip -prinsip ini jika anda menyusun aplikasi anda dengan bijak.
Mulakan Kecil: Bersihkan pengawal, ekstrak logik ke dalam perkhidmatan, gunakan antara muka, dan biarkan bekas perkhidmatan melakukan yang lain.
Pada asasnya, jangan biarkan model atau pengawal yang fasih menjadi tempat lambakan untuk segala -galanya.
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan prinsip -prinsip pepejal dalam projek Laravel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Terdapat tiga cara untuk menambah peraturan pengesahan tersuai di Laravel: Menggunakan penutupan, kelas peraturan, dan permintaan borang. 1. Gunakan penutupan sesuai untuk pengesahan ringan, seperti menghalang nama pengguna "admin"; 2. Buat kelas peraturan (seperti ValidUserNamerule) untuk membuat logik kompleks lebih jelas dan dapat dipelihara; 3. Mengintegrasikan pelbagai peraturan dalam permintaan borang dan mengurus logik pengesahan secara berpusat. Pada masa yang sama, anda boleh menetapkan arahan melalui kaedah mesej tersuai atau array mesej ralat masuk untuk meningkatkan fleksibiliti dan penyelenggaraan.

Kaedah teras untuk aplikasi Laravel untuk melaksanakan sokongan berbilang bahasa termasuk: menetapkan fail bahasa, penukaran bahasa dinamik, penghalaan URL terjemahan, dan mengurus kekunci terjemahan dalam templat bilah. Pertama, aturkan rentetan setiap bahasa dalam folder yang sepadan (seperti en, es, fr) dalam direktori /sumber /lang, dan tentukan kandungan terjemahan dengan mengembalikan array bersekutu; 2. Terjemahkan nilai utama melalui panggilan fungsi penolong \ _ _ _ _ (), dan gunakan app :: setLocale () untuk menggabungkan sesi atau parameter penghalaan untuk merealisasikan pertukaran bahasa; 3. Untuk URL Terjemahan, laluan boleh ditakrifkan untuk bahasa yang berbeza melalui kumpulan penghalaan prefixed, atau alias laluan dalam fail bahasa yang dipetakan secara dinamik; 4. Simpan kunci terjemahan ringkas dan

TowOrkeffectivyWithPivotTableSinlaravel, firstAccessPivotDataingWithPivot () orwithTimestamps (), thenupdateEntriesWithupdatee XistingPivot (), ManagerelationshipSviadetach () andSync (), AnduseCustompivotModelSwhenneeded.1.usewithPivot () toincludespecificcol

Laravelprovidesacleanandflexiblaytosendnotificationsviamultiplechannelslikeemail, sms, in-appalerts, andpushnotifications.youdinotificationchannelsinthevia () methodoFanotificationClass, andImplementsPecificmethods (toDDoTaTaStoMail (toDDoTaTaStomail (toDDoTaTaSTOMAIL (

ServiceProvider adalah mekanisme teras yang digunakan dalam rangka kerja Laravel untuk mendaftarkan perkhidmatan dan memulakan logik. Anda boleh membuat perkhidmatan perkhidmatan tersuai melalui perintah artisan; 1. Kaedah daftar digunakan untuk mengikat perkhidmatan, mendaftarkan singleton, menetapkan alias, dan lain -lain, dan perkhidmatan lain yang belum dimuatkan tidak dapat dipanggil; 2. Kaedah boot berjalan selepas semua perkhidmatan didaftarkan dan digunakan untuk mendaftarkan pendengar acara, melihat sintesis, middleware dan logik lain yang bergantung kepada perkhidmatan lain; Kegunaan umum termasuk antara muka dan pelaksanaan yang mengikat, mendaftarkan fasad, memuatkan konfigurasi, mendaftarkan arahan baris arahan dan melihat komponen; Adalah disyorkan untuk memusatkan pengikatan yang relevan kepada perkhidmatan perkhidmatan untuk mengurus, dan memberi perhatian kepada pendaftaran

Suntikan ketergantungan secara automatik mengendalikan kebergantungan kelas melalui bekas perkhidmatan di Laravel tanpa objek baru manual. Intinya adalah suntikan pembina dan suntikan kaedah, seperti lulus secara automatik dalam contoh permintaan dalam pengawal. Ketergantungan parses Laravel melalui jenis arahan dan rekursif mencipta objek yang diperlukan. Antara muka dan pelaksanaan yang mengikat boleh digunakan oleh pembekal perkhidmatan untuk menggunakan kaedah mengikat, atau singleton untuk mengikat singleton. Apabila menggunakannya, anda perlu memastikan jenis arahan, elakkan komplikasi pembina, gunakan pengikatan konteks dengan berhati -hati, dan memahami peraturan parsing automatik. Menguasai ini dapat meningkatkan fleksibiliti dan penyelenggaraan kod.

Pengoptimuman prestasi Laravel dapat meningkatkan kecekapan aplikasi melalui empat arah teras. 1. Gunakan mekanisme cache untuk mengurangkan pertanyaan pendua, menyimpan data yang jarang berubah melalui cache :: ingat () dan kaedah lain untuk mengurangkan kekerapan akses pangkalan data; 2. Mengoptimumkan pangkalan data dari model ke pernyataan pertanyaan, elakkan pertanyaan n 1, menentukan pertanyaan medan, menambah indeks, pemprosesan paging dan pemisahan membaca dan menulis, dan mengurangkan kesesakan; 3. Gunakan operasi yang memakan masa seperti menghantar e-mel dan mengeksport fail ke pemprosesan asynchronous giliran, gunakan penyelia untuk menguruskan pekerja dan menubuhkan mekanisme semula; 4. Gunakan middleware dan penyedia perkhidmatan dengan munasabah untuk mengelakkan logik kompleks dan kod permulaan yang tidak perlu, dan kelewatan pemuatan perkhidmatan untuk meningkatkan kecekapan permulaan.

Kaedah teras untuk mengendalikan pengecualian dan kesilapan rakaman dalam aplikasi Laravel termasuk: 1. Gunakan Kelas Pengecualian APP \ Pengecualian untuk mengurus pengecualian yang tidak diasingkan, dan merekodkan atau memberitahu maklumat pengecualian melalui kaedah laporan (), seperti menghantar pemberitahuan Slack; 2. Gunakan monolog untuk mengkonfigurasi sistem log, tetapkan kaedah log dan output dalam config/logging.php, dan membolehkan ralat dan log peringkat di atas dalam persekitaran pengeluaran. Pada masa yang sama, maklumat pengecualian terperinci boleh direkodkan secara manual dalam laporan () dalam kombinasi dengan konteks; 3. Sesuaikan kaedah render () untuk mengembalikan tindak balas ralat format JSON bersatu, meningkatkan kecekapan kerjasama depan dan belakang API. Langkah -langkah ini adalah
