Принципът на единната отговорност (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