SOLID — bu OOP (Object-Oriented Programming) tamoyillarining asosiy 5 prinsipidan tashkil topgan qisqartma bo‘lib, bu tamoyillar kodni o‘qilishi oson, kengaytiriluvchan va testlanadigan qilishga yordam beradi.


S — Single Responsibility Principle

Har bir class faqat bitta vazifani bajarishi kerak.

❌ Yomon uslub:

class User {
    public function save() { /* bazaga saqlash */ }
    public function sendEmail() { /* xabar yuborish */ }
}

✅ To‘g‘ri yondashuv:

class User {
    // faqat userga oid ma’lumotlar
}

class UserRepository {
    public function save(User $user) { /* saqlash */ }
}

class Mailer {
    public function sendEmail(User $user) { /* email yuborish */ }
}

O — Open/Closed Principle

Kod ochiq bo‘lishi kerak (kengaytirish uchun), lekin yopiq bo‘lishi kerak (o‘zgartirish uchun).

❌ Yomon uslub:

class Payment {
    public function pay($type) {
        if ($type == 'paypal') { /* paypal bilan to‘lash */ }
        elseif ($type == 'card') { /* karta bilan to‘lash */ }
    }
}

✅ To‘g‘ri yondashuv:

interface PaymentMethod {
    public function pay();
}

class Paypal implements PaymentMethod {
    public function pay() { /* Paypal */ }
}

class Card implements PaymentMethod {
    public function pay() { /* Card */ }
}

class PaymentProcessor {
    public function pay(PaymentMethod $method) {
        $method->pay();
    }
}

L — Liskov Substitution Principle

Asosiy klassni istalgan subclass (meros oluvchi) bilan almashtirish mumkin bo‘lishi kerak.

❌ Yomon misol:

class Bird {
    public function fly() { /* uchadi */ }
}

class Ostrich extends Bird {
    // tuyaqush ucha olmaydi, ammo fly() bor
}

✅ To‘g‘ri yondashuv:

interface Bird { }

interface FlyingBird extends Bird {
    public function fly();
}

class Sparrow implements FlyingBird {
    public function fly() { /* uchadi */ }
}

class Ostrich implements Bird {
    // ucha olmaydi, shunchaki qush
}

I — Interface Segregation Principle

Katta interfeys o‘rniga, kichik, aniq vazifali interfeyslar yaratish kerak.

❌ Yomon uslub:

interface Worker {
    public function work();
    public function eat();
}

✅ To‘g‘ri yondashuv:

interface Workable {
    public function work();
}

interface Eatable {
    public function eat();
}

class Robot implements Workable {
    public function work() { /* ishlaydi */ }
}

class Human implements Workable, Eatable {
    public function work() { /* ishlaydi */ }
    public function eat() { /* ovqatlanadi */ }
}

D — Dependency Inversion Principle

Yuqori darajadagi komponentlar past darajadagi komponentlarga emas, balki abstraksiyalarga (interface) tayanishi kerak.

❌ Yomon yondashuv:

class MySQLDatabase {
    public function connect() { /* MySQLga ulanadi */ }
}

class App {
    public function __construct() {
        $db = new MySQLDatabase();
        $db->connect();
    }
}

✅ To‘g‘ri yondashuv:

interface Database {
    public function connect();
}

class MySQLDatabase implements Database {
    public function connect() { /* MySQL */ }
}

class PostgreSQLDatabase implements Database {
    public function connect() { /* PostgreSQL */ }
}

class App {
    private $db;

    public function __construct(Database $db) {
        $this->db = $db;
        $this->db->connect();
    }
}

Xulosa:

SOLID tamoyillari dasturchiga toza, mustahkam va kengaytiriladigan tizimlar yozish imkonini beradi. Bu prinsiplarga amal qilish — yirik loyihalarda muammosiz ishlash, xatolarni kamaytirish va jamoaviy ishlab chiqishni osonlashtiradi.

Leave a Reply

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

+