Принцип единой ответственности (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, разделяя обязанности и делая наш код более удобным для сопровождения и гибким.
Продолжайте читать и подписывайтесь на меня и мою команду, чтобы быть в курсе последних блогов мира технологий.
Чтобы узнать больше о лучших практиках:
- SOLID во Flutter: https://blog.nonstopio.com/discover-how-flutter-is-built-with-dart-using-the-power-of-s-o-l-i-d-principles-459781210913
- Рекомендации по написанию API: https://blog.nonstopio.com/best-practices-for-rest-api-writing-4db28218ed50
- Стандарты кода: https://blog.nonstopio.com/coding-standards-increase-the-readability-of-code-3ddbe639c12e