Til: English O’zbek

Single Responsibility Principle (SRP)

Har bir klass faqat bitta o’zgarish sababiga ega bo’lishi kerak.

Har bir klass yoki modul bitta vazifani bajarishi lozim. Agar bitta klass bir nechta vazifani bajara boshlasa (masalan, biznes-logika, ma’lumotlarni saqlash, formatlash), ulardan birortasi o’zgarganda butun klassni qayta yozish va test qilish kerak bo’ladi.

Diagramma

SRP klass diagrammasi

Noto’g’ri yondashuv

violation.py dagi Order klassi uchta turli vazifani bajaradi:

  • Narxni hisoblash — buyurtma summasini hisoblash
  • Chegirma — biznes-qoidalari bo’yicha chegirma qo’llash
  • Saqlash — buyurtmani bazaga saqlash
class Order:
    def __init__(self, items: list[Item]) -> None:
        self.items = items
        self.total_price = self.calculate_total()
        self.total_price = self.apply_discount(self.total_price)
        self.save()

Chegirma qoidalari, narx formulasi yoki saqlash tizimi o’zgarganda — aynan shu bitta klassni o’zgartirish kerak bo’ladi.

To’g’ri yondashuv

correct.py dagi har bir vazifa alohida klassga ajratilgan:

Klass Vazifasi
Order Buyurtma ma’lumotlarini saqlaydi
PriceCalculator Umumiy narxni hisoblaydi
DiscountApplier Chegirma qoidalarini qo’llaydi
OrderRepository Bazaga saqlash bilan shug’ullanadi
@dataclass
class Order:
    items: list[Item] = field(default_factory=list)
    total_price: float = 0.0

    def finalize(self) -> None:
        self.total_price = PriceCalculator.total(self.items)
        self.total_price = DiscountApplier.apply(self.total_price)
        OrderRepository.save(self)

Endi har bir klassning faqat bitta o’zgarish sababi bor va ularni mustaqil ravishda test qilish, kengaytirish yoki almashtirish mumkin.