Rumah >pembangunan bahagian belakang >tutorial php >Pengenalan kepada Rantaian Tanggungjawab
Artikel ini menerangkan dan menunjukkan rantaian corak reka bentuk tanggungjawab.
Konsep Utama
Rantaian Tanggungjawab (COR) adalah corak reka bentuk tingkah laku yang mengarahkan permintaan melalui urutan objek pemprosesan (pengendali). Ini amat berguna apabila: pengendali yang sesuai tidak diketahui terlebih dahulu, pemilihan pengendali automatik diperlukan, atau permintaan mesti mengikuti rantaian yang diprioritaskan.COR mengintegrasikan dengan baik dengan corak lain, seperti corak komposit, membolehkan rawatan pengendali seragam dan permintaan penghantaran. Struktur fleksibelnya menggalakkan gandingan longgar dan kebolehsuaian.
Prestasi boleh dipertingkatkan menggunakan bekas perkhidmatan untuk instantiasi objek dan mekanisme caching untuk menyimpan dan menggunakan semula respons untuk permintaan yang sama.
Definisi
COR memproses permintaan dengan lulus melalui rantai objek pengendali. Permintaan mungkin dikendalikan oleh pengendali tunggal atau beberapa, bergantung kepada pelaksanaannya. Semua pengendali mengambil bahagian dalam rantai.Contoh mudah termasuk: transaksi ATM (kemasukan pin, pengeluaran jumlah, percetakan resit) dan panggilan meja bantuan (navigasi menu, langkah berpandu).
Peserta
Komponen teras adalah:
Gunakan kes
cor bersinar apabila:
Pelaksanaan Asas (PHP)
cor sering berpasangan dengan corak komposit. Inilah contoh PHP asas:
<code class="language-php"><?php abstract class BasicHandler { private $successor = null; public function setSuccessor(BasicHandler $handler) { $this->successor = $handler; } abstract public function handle($request); } class FirstHandler extends BasicHandler { public function handle($request) { // Process request... Then optionally: if ($this->successor) { return $this->successor->handle($request); } return null; // Or a response } } // ... SecondHandler, ThirdHandler classes ... $first = new FirstHandler(); $second = new SecondHandler(); $third = new ThirdHandler(); $first->setSuccessor($second); $second->setSuccessor($third); $result = $first->handle($request); ?></code>
Pelaksanaan Lanjutan (PHP)
Kekuatan Cor terletak pada organisasi rantaian fleksibelnya. Contoh ini menunjukkan penstrukturan semula dan penyesuaian:
<code class="language-php"><?php abstract class AdvancedHandler { private $successor = null; final public function setSuccessor(AdvancedHandler $handler) { if ($this->successor === null) { $this->successor = $handler; } else { $this->successor->setSuccessor($handler); } } final public function handle($request) { $response = $this->process($request); if ($response === null && $this->successor !== null) { return $this->successor->handle($request); } return $response; } abstract protected function process($request); } class FirstHandler extends AdvancedHandler { protected function process($request) { // Process request... return null to pass to successor, or a response } } // ... SecondHandler, ThirdHandler classes ... $first = new FirstHandler(); $second = new SecondHandler(); $third = new ThirdHandler(); $first->setSuccessor($second); $first->setSuccessor($third); // Adds to the end of the chain $result = $first->handle($request); ?></code>Ini meminimumkan kaedah dalam pengendali konkrit, meningkatkan perpaduan. Penambahbaikan selanjutnya mungkin melibatkan objek atau integrasi berstruktur dengan corak lain.
Response
Memisahkan konfigurasi rantai meningkatkan kejelasan kod dan pemeliharaan. Suntikan ketergantungan, berpotensi menggunakan fail konfigurasi YAML, menawarkan pendekatan yang bersih:
<code class="language-php">class Client { private $firstHandler; public function setChainOrder(array $handlers) { // Code to build the chain using $handlers } public function process($request) { return $this->firstHandler->handle($request); } }</code>Pengoptimuman prestasi
untuk aplikasi prestasi kritikal dengan pengendali yang kompleks dan permintaan yang kerap, pertimbangkan: Kesimpulan cor adalah corak yang kuat, walaupun membolehkan rantai rantai. Semasa mempromosikan gandingan longgar, reka bentuk yang teliti adalah penting untuk mengelakkan masalah yang berpotensi. Secara menyeluruh menganalisis masalah anda sebelum melaksanakan COR, memberi tumpuan kepada definisi pengendali, interaksi permintaan/tindak balas, dan kemunculan prestasi yang berpotensi. Soalan Lazim (Soalan Lazim) (Ini sudah ditangani dengan baik dalam teks asal, jadi saya tidak akan mengulanginya di sini. Teks asal memberikan jawapan yang sangat baik.)
AdvancedHandler
.
Atas ialah kandungan terperinci Pengenalan kepada Rantaian Tanggungjawab. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!