Rumah >pembangunan bahagian belakang >tutorial php >PHP Master | Penyongsangan Kawalan - Prinsip Hollywood

PHP Master | Penyongsangan Kawalan - Prinsip Hollywood

Joseph Gordon-Levitt
Joseph Gordon-Levittasal
2025-02-25 20:56:12349semak imbas

PHP Master | Inversion of Control - The Hollywood Principle

mata teras

  • Konsep penyongsangan kawalan (IOC) lebih luas daripada suntikan ketergantungan (DI), yang hanya merupakan kes aplikasi khusus untuk IOC yang mengambil kesempatan daripada IOC. DICH Reka bentuk kelas untuk mengadopsi kolaborator luar, yang disediakan oleh persekitaran sekitar;
  • IOC, yang juga dikenali sebagai Prinsip Hollywood, dapat membantu membangunkan modul program yang berskala dan dihancurkan. Ia membolehkan persekitaran luaran untuk melaksanakan semua logik yang diperlukan, dengan itu memudahkan pelaksanaan modul.
  • Mod Observer adalah contoh klasik IOC. Ia membolehkan badan yang sangat dihancurkan untuk melaksanakan beberapa tugas tertentu tanpa menjejaskan persekitaran sekitar, sementara pemerhati luaran melaksanakan logik yang diperlukan untuk mengendalikan peristiwa yang dicetuskan oleh badan.
  • IOC adalah kaedah pengaturcaraan yang mudah dan kuat yang mencipta sistem ortogonal yang dipisahkan, yang komponennya mudah diasingkan dari ujian. Ia tidak terhad kepada menguruskan kebergantungan kelas, tetapi juga boleh digunakan dengan berkesan dalam reka bentuk yang didorong oleh peristiwa.

Banyak pengaturcara (termasuk saya, jadi inilah yang saya secara terbuka mea culpa ) berfikir bahawa penyongsangan kawalan (IOC) hanyalah sinonim untuk suntikan ketergantungan (DI). Terdapat alasan yang agak intuitif untuk idea ini: jika tujuan DI adalah untuk memudahkan reka bentuk kelas supaya kolaborator luarannya disediakan oleh persekitaran sekitar, dan bukannya mencari mereka pada gilirannya, maka proses ini dapat dianggap sebagai efektif Borang IOC. Walau bagaimanapun, sementara persamaan DI = IOC biasanya sah, konsep mengawal penyongsangan itu sebenarnya lebih luas. Malah, DI boleh dikatakan sebagai kes penggunaan khusus yang mengambil kesempatan daripada IOC, tetapi ia jauh dari satu -satunya. Ini membawa kita kembali ke titik permulaan; Secara tradisinya, komponen aplikasi direka untuk mengendalikan dan mengawal persekitaran pelaksanaan, dan pendekatan ini berfungsi dengan baik. Sebagai contoh, modul pembalakan boleh dilaksanakan untuk merakam data ke dalam fail, dan bagaimana dan bila data direkodkan sepenuhnya dikawal oleh modul. Fail log (dalam kes ini bahagian persekitaran) hanyalah elemen luaran, pasif yang tidak mempengaruhi bagaimana modul berfungsi. Tetapi katakan kita perlu melanjutkan fungsi modul dan membolehkannya untuk menambah data ke pangkalan data, atau akhirnya melalui e -mel. Menaik taraf modul untuk mendedahkan fungsi tambahan akan meningkatkan kerumitannya, dan ia akan menjadi semakin kembung kerana logik yang diperlukan untuk mengendalikan tugas -tugas tambahan ini dibungkus di belakang API yang sama. Pendekatan ini berfungsi, tetapi ia tidak boleh dilanjutkan sama sekali. Keadaan ini dapat diselesaikan dengan cara yang agak mudah. Daripada mempunyai modul yang bertanggungjawab sepenuhnya untuk data pembalakan ke titik akhir pelbagai, kita boleh mengalihkan tanggungjawab terus ke persekitaran luaran. Pelaksanaan modul akan disimpan sangat mudah dan terhad untuk bertindak sebagai penjadual acara mudah. Sebaliknya, persekitaran akan bertanggungjawab untuk melaksanakan semua logik yang diperlukan untuk merekodkan data ke titik akhir yang sepenuhnya bebas dari modul yang dipersoalkan. Tidak menghairankan, proses membalikkan tanggungjawab ini antara komponen dan persekitaran secara rasmi dipanggil penyongsangan kawalan (atau lebih mudah, prinsip -prinsip Hollywood), dan apabila membangunkan modul program yang berskala, sangat dihancurkan, pelaksanaannya dapat menjadi peningkatan yang nyata.Sudah tentu, IOC adalah paradigma bebas bahasa, jadi ia boleh digunakan dengan mudah di dunia PHP.

Melaksanakan pembalikan kawalan -Owserve objek medan

IOC memang di mana -mana, jadi mudah untuk mencari pelaksanaan pengeluarannya. Kes penggunaan pertama yang masuk ke dalam fikiran adalah suntikan ketergantungan, tetapi terdapat banyak kes penggunaan yang sama, terutama dalam bidang reka bentuk yang didorong oleh peristiwa. Sekiranya anda ingin mengetahui apa yang dilakukan oleh alam semesta IOC yang selari dengan mekanisme pengendalian acara, pertimbangkan kes klasik di Perpustakaan GOF: Corak Observer. Pemerhati digunakan hampir di mana sahaja, walaupun di sisi pelanggan melalui JavaScript, dan mereka adalah contoh yang menonjol dari konsep IOC; Untuk melaksanakan logik yang diperlukan untuk mengendalikan peristiwa yang dicetuskan oleh subjek. Bagaimana untuk menangani peristiwa, atau peristiwa baru, adalah tanggungjawab pemerhati, bukan tanggungjawab subjek. Contohnya mungkin merupakan cara yang baik untuk membuat pernyataan panjang saya lebih jelas. Oleh itu, katakan kami telah melaksanakan model domain primitif yang mentakrifkan hubungan satu-ke-banyak antara catatan blog dan komen. Dalam kes ini, kami akan sengaja bercita -cita tinggi dan membolehkan model menghantar e -mel untuk memberitahu pentadbir sistem apabila komen baru ditambah ke jawatan. Secara jujur, melaksanakan fungsi sedemikian tanpa menggunakan IOC sebenarnya akan menjadi kekacauan kerana kami akan meminta objek domain untuk melakukan sesuatu di luar skopnya. Sebaliknya, kita boleh mengambil pendekatan berasaskan IOC dan menentukan kelas domain berikut:

(Contoh kod ditinggalkan di sini kerana bahagian kandungan ini tidak ada kaitan dengan pseudo-asal yang diperlukan oleh soalan dan terlalu panjang.)

Kawalan amanah ke persekitaran luaran - merealisasikan perkhidmatan pemberitahuan komen

Membina perkhidmatan pemerhati yang mencetuskan pemberitahuan e -mel apabila menambah komen baru ke pos blog adalah proses mudah yang memudahkan untuk menentukan kelas yang melaksanakan kaedah update() yang relevan. (Contoh kod juga ditinggalkan di sini, atas sebab yang sama seperti di atas.)

Ringkasan

penyongsangan kawalan sering dianggap sebagai konsep yang tidak jelas, terutamanya dalam PHP, di mana banyak pemaju cenderung mengaitkannya dengan suntikan ketergantungan biasa, tetapi ia adalah cara yang mudah dan berkuasa untuk program, jika dilaksanakan dengan betul, ia adalah cara terbaik untuk membuat Sistem ortogonal yang dipisahkan, yang komponennya mudah diasingkan dari ujian. Jika anda menggunakan suntikan ketergantungan dalam permohonan anda (anda memang menggunakannya, bukan?), Maka anda harus merasakan bahawa naluri pengaturcara anda berpuas hati kerana anda sudah memanfaatkan manfaat yang disediakan oleh penyongsangan. Walau bagaimanapun, seperti yang saya cuba tunjukkan sebelum ini, terdapat banyak situasi yang sesuai dengan pendekatan ini selain menguruskan kebergantungan kelas dengan cara yang betul. Reka bentuk yang didorong oleh acara tentu saja merupakan contoh yang baik.

(bahagian Soalan Lazim ditinggalkan di sini, sebab yang sama seperti di atas.)

Atas ialah kandungan terperinci PHP Master | Penyongsangan Kawalan - Prinsip Hollywood. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn