mata teras
- Corak gudang bertindak sebagai perantara antara aplikasi dan sumber data, yang membolehkan pembinaan seni bina yang dipadam untuk mencapai skalabilitas tanpa memerlukan kebergantungan keras.
- Mod ini membolehkan aplikasi memberi tumpuan kepada menerima dan menghantar data untuk menyimpan tanpa memberi perhatian kepada butiran sumber data. Ia melakukan ini melalui API awam (antara muka) di mana semua pengguna berkomunikasi dengan sumber data.
- Walaupun corak gudang menawarkan manfaat seperti pemisahan kebimbangan dan kemudahan ujian unit, ia juga menambah lapisan abstraksi, yang boleh merumitkan aplikasi kecil.
- Melaksanakan corak gudang memerlukan suntikan ketergantungan, yang membolehkan gudang data terikat pada antara muka gudang. Ini mengelakkan gandingan keras dan memudahkan pengaturcaraan berorientasikan antara muka.
Apakah model gudang?
Cukup, ia adalah pelaksanaan lapisan perantara antara aplikasi dan sumber data. Pihak tidak perlu mengenali satu sama lain untuk melaksanakan tugas masing-masing, yang membolehkan kita mempunyai seni bina yang dipadamkan yang membantu skala dalam aplikasi besar tanpa kebergantungan keras.
Mengapa anda perlu memberi perhatian kepadanya?
mari kita fahami ini dengan contoh. Katakan kami sedang membina kedai dalam talian yang menjual gula -gula berperisa oren. Ia adalah kedai kecil yang menyimpan stok tempatan supaya kami tidak memerlukan apa -apa yang mewah. Aplikasi kedai hanya boleh menyambung ke pangkalan data dan mengambil pesanan dalam talian berdasarkan inventori sedia ada. Ini akan berfungsi dengan baik kerana kedai hanya mempunyai satu gudang bekalan dan kawasan operasi yang terhad. Tetapi apa yang berlaku jika kedai mahu mengembangkan kawasan operasi? Kedai mungkin mahu berkembang ke bandar lain atau di seluruh negara, dan mempunyai sistem inventori pusat akan sangat menyusahkan.Jika kita masih menggunakan model data, maka aplikasi kami akan digabungkan dengan ketat. Aplikasi kedai perlu mengetahui setiap sumber data yang perlu berinteraksi, yang merupakan reka bentuk aplikasi yang buruk. Tugas aplikasi kedai adalah untuk membolehkan pelanggan memesan gula -gula, aplikasi itu tidak peduli dengan sumber data, ia tidak sepatutnya menjejaki semua sumber data yang berbeza. Di sinilah gudang data dimainkan. Menurut corak gudang, API awam didedahkan melalui antara muka, dan setiap pengguna (dalam hal ini aplikasi kedai kami) menggunakannya untuk berkomunikasi dengan sumber data. Sumber data mana yang hendak digunakan atau bagaimana untuk menyambungnya tidak ada kaitan dengan aplikasi itu. Permohonan hanya peduli terhadap data yang diperolehnya dan data yang dikirimkan untuk disimpan.
Setelah corak gudang dilaksanakan, gudang boleh dibuat untuk setiap sumber data. Aplikasi kedai tidak lagi perlu menjejaki sebarang sumber data, ia hanya menggunakan API repositori untuk mendapatkan data yang mereka perlukan.
Adakah ia ubat?
tidak, tidak. Seperti setiap corak reka bentuk, ia mempunyai kebaikan dan keburukannya.
Pro:
- Pemisahan kebimbangan;
- membolehkan ujian unit mudah, kerana repositori terikat kepada antara muka yang menyuntik kelas pada runtime.
- DRY (Jangan Ulangi Sendiri) Reka bentuk, kod untuk menanyakan dan mendapatkan data dari sumber data tidak akan diulang.
Kekurangan:
- Tambah satu lagi lapisan abstraksi, menambah tahap kerumitan tertentu, menjadikannya terlalu kompleks untuk aplikasi kecil.
Bagaimana untuk melakukannya?
mari kita lihat contoh kod mudah. Saya akan menggunakan Laravel dalam contoh saya untuk memanfaatkan fungsi suntikan ketergantungan yang sangat baik. Jika anda menggunakan rangka kerja PHP moden, ia sepatutnya mempunyai suntikan pergantungan/bekas IOC. Melaksanakan corak gudang memerlukan suntikan ketergantungan, kerana tanpa itu anda tidak akan dapat mengikat gudang data anda ke antara muka gudang, dan keseluruhan idea adalah pengaturcaraan berorientasikan antara muka untuk mengelakkan gandingan berkod keras. Sekiranya anda tidak menggunakan rangka kerja atau rangka kerja pilihan anda tidak mempunyai bekas IOC, anda boleh menggunakan bekas IOC di luar (lihat nota kaki).
mari kita mulakan. Pertama, kami menyediakan ruang nama dan autoload kami dalam komposer. Buka composer.json dan tambahkan Autoload PSR-4 ke ruang nama kami (dalam nod autoload, sejurus selepas kelas).
"autoload": { "classmap": [ "app/commands", "app/controllers", "app/models", "app/database/migrations", "app/database/seeds", "app/tests/TestCase.php" ], "psr-4": { "RocketCandy\": "app/RocketCandy" } },
Selepas menyimpan, laksanakan composer dump-autoload -o
di terminal untuk mendaftarkan pemuatan automatik ruang nama baru. Buat app/RocketCandy/Repositories/OrangeCandyRepository/
dalam OrangeCandyRepository.php
. Ini akan menjadi antara muka repositori kami.
<?php namespace RocketCandy\Repositories\OrangeCandyRepository; interface OrangeCandyRepository { public function get_list( $limit = 0, $skip = 0 ); public function get_detail( $candy_id = 0 ); }
Sekarang kita mempunyai antara muka, kita boleh membuat repositori. Buat app/RocketCandy/Repositories/OrangeCandyRepository/
dalam CityAOrangeCandyRepository.php
.
<?php namespace RocketCandy\Repositories\OrangeCandyRepository; class CityAOrangeCandyRepository implements OrangeCandyRepository { public function get_list( $limit = 0, $skip = 0 ) { // 查询数据源并获取糖果列表 } public function get_detail( $candy_id = 0 ) { // 查询数据源并获取糖果详情 } }
Untuk mengikat repositori CityAOrangeCandyRepository
ke antara muka OrangeCandyRepository
, kami akan menggunakan bekas IOC Laravel. Buka app/start/global.php
dan tambahkan yang berikut ke akhir fail.
//OrangeCandyRepository App::bind( 'RocketCandy\Repositories\OrangeCandyRepository\OrangeCandyRepository', 'RocketCandy\Repositories\OrangeCandyRepository\CityAOrangeCandyRepository' );
Nota: Saya hanya meletakkan pengikatan IOC dalam global.php
untuk demonstrasi. Idealnya, ini harus diletakkan dalam fail berasingan mereka sendiri di mana anda boleh meletakkan semua pengikatan IOC dan kemudian memuatkan fail tersebut di sini dalam global.php
atau anda boleh membuat pembekal perkhidmatan untuk mendaftarkan setiap ikatan IOC. Anda boleh membaca lebih lanjut di sini.
Sekarang kita boleh menggunakan repositori melalui antara muka. Dalam app/controllers/
terletak di CandyListingController.php
.
"autoload": { "classmap": [ "app/commands", "app/controllers", "app/models", "app/database/migrations", "app/database/seeds", "app/tests/TestCase.php" ], "psr-4": { "RocketCandy\": "app/RocketCandy" } },
di sini, kami menyuntik antara muka OrangeCandyRepository
ke dalam pengawal kami dan menyimpan rujukan objeknya dalam pemboleh ubah kelas yang kini boleh digunakan oleh mana -mana fungsi dalam pengawal untuk data pertanyaan. Oleh kerana kita mengikat antara muka OrangeCandyRepository
ke repositori CityAOrangeCandyRepository
, ia akan menjadi sama seperti kita menggunakan repositori CityAOrangeCandyRepository
secara langsung.
Jadi, sekarang, jenis dan jenis sumber data adalah satu -satunya kebimbangan CityAOrangeCandyRepository
. Permohonan kami hanya mengetahui antara muka OrangeCandyRepository
dan API yang terdedah, dan setiap repositori yang melaksanakannya mesti mematuhi API itu. Gudang itu dihuraikan dari bekas IOC pada masa yang sama, yang bermaksud bahawa pengikat gudang antara muka boleh ditetapkan seperti yang diperlukan Sumber data kini boleh menjadi pangkalan data, perkhidmatan web atau saluran paip hyperdata silang dimensi.
tidak semua kes dikenakan
Seperti yang saya nyatakan dalam kelemahan corak repositori, ia menambah beberapa kerumitan kepada aplikasi. Oleh itu, jika anda membuat aplikasi kecil dan anda tidak melihatnya berkembang ke titik di mana ia besar (mungkin memerlukan pelbagai sumber data yang dipanggil), lebih baik tidak melaksanakannya dan berpegang pada model data gaya lama. Memahami sesuatu adalah berbeza daripada mengetahui bila menggunakannya. Ini adalah corak reka bentuk yang sangat mudah yang menjimatkan banyak masalah apabila membuat aplikasi dan apabila anda perlu mengekalkan atau melanjutkan (atau mengurangkan) aplikasi, tetapi ia bukan ubat untuk semua aplikasi.
Saya menggunakan kod khusus Laravel untuk menunjukkan pelaksanaan di atas, tetapi ia agak mudah dan serupa untuk mana -mana bekas IOC yang baik. Ada soalan? Sila buat komen di bawah.
Nota kaki:
-
Berikut adalah beberapa perpustakaan kontena IOC yang boleh anda gunakan jika rangka kerja anda tidak mempunyai atau anda tidak menggunakan rangka kerja:
- Ornodi
- ray.di
- auryn
- dadu
- Bucket
- ding
-
Membaca yang dicadangkan:
- reka bentuk didorong domain dengan cepat
- Reka bentuk yang didorong oleh domain oleh Eric Evans
Soalan Lazim mengenai Model Gudang
(bahagian kandungan ini sangat kebetulan dengan teks asal. Untuk mengelakkan pertindihan, ia ditinggalkan di sini. Bahagian FAQ dalam teks asal telah memasukkan penjelasan yang komprehensif mengenai corak gudang.)
Atas ialah kandungan terperinci Corak reka bentuk repositori demystified. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Timeout sesi mutlak bermula pada masa penciptaan sesi, sementara waktu tamat sesi terbiar bermula pada masa operasi pengguna. Tamat masa sesi mutlak sesuai untuk senario di mana kawalan ketat kitaran hayat sesi diperlukan, seperti aplikasi kewangan; Timeout sesi terbiar sesuai untuk aplikasi yang mahu pengguna menyimpan sesi mereka aktif untuk masa yang lama, seperti media sosial.

Kegagalan sesi pelayan boleh diselesaikan dengan mengikuti langkah -langkah: 1. Semak konfigurasi pelayan untuk memastikan sesi ditetapkan dengan betul. 2. Sahkan kuki klien, sahkan bahawa penyemak imbas menyokongnya dan hantar dengan betul. 3. Periksa perkhidmatan penyimpanan sesi, seperti Redis, untuk memastikan bahawa mereka beroperasi secara normal. 4. Semak kod aplikasi untuk memastikan logik sesi yang betul. Melalui langkah -langkah ini, masalah perbualan dapat didiagnosis dengan berkesan dan diperbaiki dan pengalaman pengguna dapat diperbaiki.

session_start () iscrucialinphpformanaginguserSessions.1) itinitiatesanewsessionifnoneexists, 2) resumeSanexistingsession, dan3) setSasessionCookieforcontinuityAcrossrequests, enableingApplicationeUseUshenticationandPersonalConizedConizedContentContentContentContentContentContentContentContentContentContentContentC.

Menetapkan bendera httponly adalah penting untuk cookies sesi kerana ia dapat mencegah serangan XSS dengan berkesan dan melindungi maklumat sesi pengguna. Khususnya, 1) bendera httponly menghalang JavaScript daripada mengakses kuki, 2) bendera boleh ditetapkan melalui setcookies dan make_response dalam php dan flask, 3) walaupun ia tidak dapat dicegah dari semua serangan, ia harus menjadi sebahagian daripada dasar keselamatan keseluruhan.

PhpsSesionssolveThublemofMainTainStateAsmultipHttprequestsByStoringDataontheserverArverArsociatingWithauniquesession.1) merekaSTOREdataServer-sisi, biasanya

Phpsessionscanstorestrings, nombor, tatasusunan, andobjects.1.strings: textdatalikeusernames.2.numbers: integersorfloatsforcounters.3.Arrays: ListsLikeshoppingCarts.4.Objects: complextructureSturesthatareserialized.

Tostartaphpsession, usesession_start () atthescript'sbeginning.1) placeitbeforeanyoutputtosetthesessioncookie.2) usesessionsforusererdatalikeloginstatusorshoppingcarts.3)

Penjanaan semula sesi merujuk kepada menjana ID sesi baru dan membatalkan ID lama apabila pengguna melakukan operasi sensitif dalam kes serangan tetap sesi. Langkah-langkah pelaksanaan termasuk: 1. Mengesan Operasi Sensitif, 2. Menjana ID Sesi Baru, 3. Memusnahkan ID Sesi Lama, 4. Kemas kini maklumat sesi pengguna.


Alat AI Hot

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

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

Undress AI Tool
Gambar buka pakaian secara percuma

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

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

VSCode Windows 64-bit Muat Turun
Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

Dreamweaver Mac版
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)
