Prinsip SOLID ialah satu set lima prinsip reka bentuk yang membantu pembangun perisian mencipta aplikasi yang lebih boleh diselenggara, fleksibel dan berskala. Ia digunakan secara meluas dalam pengaturcaraan berorientasikan objek (OOP) untuk memastikan perisian tersusun dengan baik, mudah dipanjangkan dan kurang terdedah kepada ralat. Prinsip ini amat berfaedah apabila menulis aplikasi PHP, kerana ia membantu pembangun mengelakkan pertindihan kod, mengurangkan kerumitan dan meningkatkan kebolehbacaan.
Prinsip SOLID telah diperkenalkan oleh Robert C. Martin (Pakcik Bob), dan ia menyediakan pelan tindakan untuk menulis kod yang berkualiti tinggi dan boleh diselenggara. Setiap huruf dalam akronim SOLID bermaksud salah satu daripada lima prinsip:
Mari kita terokai setiap prinsip secara terperinci dan fahami cara ia meningkatkan kualiti kod.
Definisi: Kelas sepatutnya mempunyai satu sebab sahaja untuk berubah, bermakna kelas itu harus mempunyai satu tanggungjawab atau pekerjaan sahaja. Jika kelas memikul pelbagai tanggungjawab, ia menjadi lebih sukar untuk diselenggara dan diubah suai.
Contoh PHP:
// Bad Example: A class handling multiple responsibilities class UserManager { public function createUser($data) { // Logic to create user } public function sendEmail($user) { // Logic to send email } }
Dalam contoh ini, kelas UserManager bertanggungjawab untuk membuat pengguna dan menghantar e-mel, yang melanggar Prinsip Tanggungjawab Tunggal.
Contoh yang Diperbaiki:
// Good Example: Separate responsibilities into different classes class UserManager { public function createUser($data) { // Logic to create user } } class EmailService { public function sendEmail($user) { // Logic to send email } }
Mengapa SRP Meningkatkan Kualiti Kod:
Definisi: Entiti perisian (kelas, modul, fungsi, dll.) harus dibuka untuk sambungan tetapi ditutup untuk pengubahsuaian. Ini bermakna anda sepatutnya dapat memanjangkan gelagat kelas tanpa mengubah kod sedia ada.
Contoh PHP:
// Bad Example: A class handling multiple responsibilities class UserManager { public function createUser($data) { // Logic to create user } public function sendEmail($user) { // Logic to send email } }
Daripada mengubah suai kelas Pesanan untuk mengendalikan tingkah laku baharu (seperti diskaun), kami boleh melanjutkan kelas tanpa menyentuh kod asal.
Contoh yang Diperbaiki:
// Good Example: Separate responsibilities into different classes class UserManager { public function createUser($data) { // Logic to create user } } class EmailService { public function sendEmail($user) { // Logic to send email } }
Mengapa OCP Meningkatkan Kualiti Kod:
Definisi: Objek superclass hendaklah boleh digantikan dengan objek subkelasnya tanpa menjejaskan ketepatan program. Prinsip ini memastikan bahawa kelas terbitan boleh digantikan untuk kelas asasnya tanpa mengubah sifat yang diingini program.
Contoh PHP:
// Bad Example: Modifying existing class to add functionality class Order { public function calculateTotal($items) { $total = 0; foreach ($items as $item) { $total += $item['price']; } return $total; } } class DiscountOrder extends Order { public function calculateTotal($items) { $total = parent::calculateTotal($items); $total -= 10; // Apply discount return $total; } }
Dalam contoh ini, menggantikan objek Burung Unta dengan objek Burung akan mematahkan program, kerana kaedah lalat tidak terpakai kepada burung unta.
Contoh yang Diperbaiki:
// Good Example: Using interfaces or abstract classes for extension interface DiscountStrategy { public function applyDiscount($total); } class NoDiscount implements DiscountStrategy { public function applyDiscount($total) { return $total; } } class TenPercentDiscount implements DiscountStrategy { public function applyDiscount($total) { return $total * 0.9; } } class Order { private $discountStrategy; public function __construct(DiscountStrategy $discountStrategy) { $this->discountStrategy = $discountStrategy; } public function calculateTotal($items) { $total = 0; foreach ($items as $item) { $total += $item['price']; } return $this->discountStrategy->applyDiscount($total); } }
Mengapa LSP Meningkatkan Kualiti Kod:
Definisi: Pelanggan tidak boleh dipaksa untuk bergantung pada antara muka yang mereka tidak gunakan. Dalam erti kata lain, adalah lebih baik untuk mempunyai beberapa antara muka khusus yang lebih kecil daripada satu antara muka tujuan umum yang besar.
Contoh PHP:
// Bad Example: Violating Liskov Substitution class Bird { public function fly() { // Flying logic } } class Ostrich extends Bird { public function fly() { throw new Exception("Ostriches can't fly!"); } }
Dalam contoh ini, kelas Robot terpaksa melaksanakan kaedah makan, yang tidak berkaitan dengannya.
Contoh yang Diperbaiki:
// Good Example: Respecting Liskov Substitution class Bird { public function move() { // General movement logic } } class Sparrow extends Bird { public function move() { // Flying logic for sparrow } } class Ostrich extends Bird { public function move() { // Walking logic for ostrich } }
Mengapa ISP Meningkatkan Kualiti Kod:
Definisi: Modul peringkat tinggi tidak boleh bergantung pada modul peringkat rendah. Kedua-duanya harus bergantung pada abstraksi (cth., antara muka). Tambahan pula, abstraksi tidak seharusnya bergantung pada butiran. Butiran harus bergantung pada abstraksi.
Contoh PHP:
// Bad Example: A class handling multiple responsibilities class UserManager { public function createUser($data) { // Logic to create user } public function sendEmail($user) { // Logic to send email } }
Di sini, UserService bergantung secara langsung pada Pangkalan Data, yang melanggar DIP, kerana ia menghubungkan logik peringkat tinggi dengan pelaksanaan peringkat rendah.
Contoh yang Diperbaiki:
// Good Example: Separate responsibilities into different classes class UserManager { public function createUser($data) { // Logic to create user } } class EmailService { public function sendEmail($user) { // Logic to send email } }
Mengapa DIP Meningkatkan Kualiti Kod:
Prinsip SOLID dalam PHP membimbing pembangun ke arah menulis kod yang bersih, boleh diselenggara dan berskala. Dengan mengikut prinsip ini, pembangun boleh:
Dengan mematuhi prinsip ini, pembangun PHP boleh meningkatkan kualiti pangkalan kod mereka dengan ketara, mengurangkan hutang teknikal dan memastikan kebolehselenggaraan jangka panjang.
Atas ialah kandungan terperinci Memahami Prinsip SOLID dalam PHP dan Cara Ia Meningkatkan Kualiti Kod. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!