SOLID

Założenie: Przedstawimy podstawowe zasady SOLID w kontekście programowania obiektowego w PHP, ilustrując je prostymi przykładami.

Krok po kroku:

  1. Zasada Single Responsibility Principle (SRP): Każda klasa powinna mieć tylko jedną odpowiedzialność.
    
    // Zła praktyka - klasa robi za dużo
    class User {
        public function registerUser($data) { /*...*/ }
        public function updateUser($data) { /*...*/ }
        public function deleteUser($id) { /*...*/ }
        public function sendEmail($email, $message) { /*...*/ }
    }
    
    // Dobra praktyka - podział odpowiedzialności
    class UserRegistration {
        public function registerUser($data) { /*...*/ }
    }
    
    class UserUpdater {
        public function updateUser($data) { /*...*/ }
    }
    
    class UserDeleter {
        public function deleteUser($id) { /*...*/ }
    }
    
    class EmailSender {
        public function sendEmail($email, $message) { /*...*/ }
    }
    				

    Wyjaśnienie: Zamiast jednej dużej klasy `User`, rozdzielamy odpowiedzialności na mniejsze, bardziej spójne klasy. To ułatwia testowanie, modyfikację i utrzymanie kodu.

  2. Zasada Open/Closed Principle (OCP): Klasy powinny być otwarte na rozszerzenie, ale zamknięte na modyfikację.
    
    // Przykład z wykorzystaniem interfejsu
    interface PaymentMethod {
        public function processPayment($amount);
    }
    
    class PayPal implements PaymentMethod {
        public function processPayment($amount) { /*...*/ }
    }
    
    class CreditCard implements PaymentMethod {
        public function processPayment($amount) { /*...*/ }
    }
    
    // Dodanie nowej metody płatności nie wymaga zmiany istniejącego kodu
    				

    Wyjaśnienie: Użycie interfejsów pozwala na dodawanie nowych metod płatności bez konieczności modyfikowania istniejącego kodu.

Ten przykład prezentuje podstawowe zasady SOLID. Zachęcamy do dalszego zgłębiania tematu, aby lepiej zrozumieć, jak poprawić jakość i utrzymywalność swojego kodu.

Dodaj komentarz 0

Your email address will not be published. Required fields are marked *