Corak reka bentuk repositori demystified
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!

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

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











Dalam php, kata laluan_hash dan kata laluan 1) password_hash menjana hash yang mengandungi nilai garam untuk meningkatkan keselamatan. 2) Kata Laluan_verify Sahkan kata laluan dan pastikan keselamatan dengan membandingkan nilai hash. 3) MD5 dan SHA1 terdedah dan kekurangan nilai garam, dan tidak sesuai untuk keselamatan kata laluan moden.

PHP dan Python masing -masing mempunyai kelebihan mereka sendiri, dan memilih mengikut keperluan projek. 1.PHP sesuai untuk pembangunan web, terutamanya untuk pembangunan pesat dan penyelenggaraan laman web. 2. Python sesuai untuk sains data, pembelajaran mesin dan kecerdasan buatan, dengan sintaks ringkas dan sesuai untuk pemula.

PHP digunakan secara meluas dalam e-dagang, sistem pengurusan kandungan dan pembangunan API. 1) e-dagang: Digunakan untuk fungsi keranjang belanja dan pemprosesan pembayaran. 2) Sistem Pengurusan Kandungan: Digunakan untuk penjanaan kandungan dinamik dan pengurusan pengguna. 3) Pembangunan API: Digunakan untuk Pembangunan API RESTful dan Keselamatan API. Melalui pengoptimuman prestasi dan amalan terbaik, kecekapan dan pemeliharaan aplikasi PHP bertambah baik.

Jenis PHP meminta untuk meningkatkan kualiti kod dan kebolehbacaan. 1) Petua Jenis Skalar: Oleh kerana Php7.0, jenis data asas dibenarkan untuk ditentukan dalam parameter fungsi, seperti INT, Float, dan lain -lain. 2) Return Type Prompt: Pastikan konsistensi jenis nilai pulangan fungsi. 3) Jenis Kesatuan Prompt: Oleh kerana Php8.0, pelbagai jenis dibenarkan untuk ditentukan dalam parameter fungsi atau nilai pulangan. 4) Prompt jenis yang boleh dibatalkan: membolehkan untuk memasukkan nilai null dan mengendalikan fungsi yang boleh mengembalikan nilai null.

PHP masih dinamik dan masih menduduki kedudukan penting dalam bidang pengaturcaraan moden. 1) kesederhanaan PHP dan sokongan komuniti yang kuat menjadikannya digunakan secara meluas dalam pembangunan web; 2) fleksibiliti dan kestabilannya menjadikannya cemerlang dalam mengendalikan borang web, operasi pangkalan data dan pemprosesan fail; 3) PHP sentiasa berkembang dan mengoptimumkan, sesuai untuk pemula dan pemaju yang berpengalaman.

PHP terutamanya pengaturcaraan prosedur, tetapi juga menyokong pengaturcaraan berorientasikan objek (OOP); Python menyokong pelbagai paradigma, termasuk pengaturcaraan OOP, fungsional dan prosedur. PHP sesuai untuk pembangunan web, dan Python sesuai untuk pelbagai aplikasi seperti analisis data dan pembelajaran mesin.

Menggunakan penyataan preprocessing dan PDO dalam PHP secara berkesan dapat mencegah serangan suntikan SQL. 1) Gunakan PDO untuk menyambung ke pangkalan data dan tetapkan mod ralat. 2) Buat kenyataan pra -proses melalui kaedah menyediakan dan lulus data menggunakan ruang letak dan laksanakan kaedah. 3) Hasil pertanyaan proses dan pastikan keselamatan dan prestasi kod.

PHP dan Python mempunyai kelebihan dan kekurangan mereka sendiri, dan pilihannya bergantung kepada keperluan projek dan keutamaan peribadi. 1.PHP sesuai untuk pembangunan pesat dan penyelenggaraan aplikasi web berskala besar. 2. Python menguasai bidang sains data dan pembelajaran mesin.
