Принцип единой ответственности (SRP) — один из SOLID принципов объектно-ориентированного программирования. В нем говорится, что у класса должна быть только одна причина для изменения. Другими словами, у класса должна быть только одна обязанность или задание.

Давайте возьмем пример, чтобы понять этот принцип в Python.

class Customer:
    def __init__(self, name, email):
        self.name = name
        self.email = email

    def send_email(self, message):
        # sending an email to the customer
        pass

    def place_order(self, order):
        # placing an order
        pass

    def generate_invoice(self, invoice):
        # generating an invoice
        pass

    def add_feedback(self, feedback):
        # add feedback
        pass

В этом примере у нас есть класс Customer, который выполняет три функции: отправка электронного письма покупателю, размещение заказа и создание счета. Это нарушает SRP, потому что, если нам нужно изменить какую-либо из этих обязанностей, нам нужно будет изменить класс Customer.

Чтобы следовать SRP, мы должны разделить класс Customer на меньшие и более конкретные классы, каждый из которых несет определенную ответственность. Вот пример:

class Customer:
    def __init__(self, name, email):
        self.name = name
        self.email = email

class EmailService:
    def send_email(self, customer, message):
        # Sending an email to the customer
        pass

class OrderService:
    def place_order(self, customer, order):
        # Placing an order
        pass

class InvoiceService:
    def generate_invoice(self, customer, invoice):
        # Generating an invoice
        pass

class FeedbackService:
    def add_feedback(self, customer, feedback):
        # add customer feedback
        pass

Теперь у каждого класса есть только одна обязанность, что упрощает поддержку и понимание нашего кода. Класс Customer отвечает только за хранение информации о клиенте, а классы EmailService, OrderService и InvoiceService отвечают за отправку электронных писем, размещение заказов и создание счетов соответственно.

customer = Customer("shailesh", "[email protected]")

email_service = EmailService()
order_service = OrderService()
invoice_service = InvoiceService()
feedback_service = FeedbackService()

email_service.send_email(customer, "Thank you for your order")
order_service.place_order(customer, "Product A")
invoice_service.generate_invoice(customer, "Invoice 1")
feedback_service.add_feedback(customer, "Good Service")

В приведенном выше примере мы создали каждый класс отдельно и использовали их для выполнения соответствующих обязанностей. Таким образом, мы следовали SRP, разделяя обязанности и делая наш код более удобным для сопровождения и гибким.

Продолжайте читать и подписывайтесь на меня и мою команду, чтобы быть в курсе последних блогов мира технологий.

Чтобы узнать больше о лучших практиках: