Школа
Управление

Как написать аккуратный код? Часть четвёртая: ответственность

9 июля 2020
👁 7254  
Управление

Как написать аккуратный код? Часть четвёртая: ответственность

9 июля 2020
👁 7254  
Фёдор Борщёв
Программист, стартапер, ИТ‑консультант
Полезно
 6
6
Непонятно
 5
5
Войдите в Бюросферу, чтобы голосовать

Аккуратный код

Аккуратный код

В прошлых советах о чистоте кода мы проектировали бэкенд для системы, которая продаёт курсы и билеты на вебинары. Давайте теперь представим, что станет с этой системой через несколько месяцев существенных доработок. Скорее всего, за это время мы сделаем парочку выгрузок и печатных документов для бухгалтерии, добавим расчёт стоимости доставки, несколько уровней скидок, уведомления в Телеграме о количестве заказов в день и Эпл‑пей. Каждая из этих фич, скорее всего, оставит след в классе заказа, сделав его примерно таким:

Нож «Викторинокс Свиссчемп Икс‑Эй‑Ви‑Ти» с 83 функциями. Википедия

Одни и те же задачи мы начнём решать по два раза. Программист, делающий выгрузку для бухгалтерии, напишет метод для расчёта НДС и положит его в класс Order. А его товарищ, занятый интеграцией с логистическим партнёром, — напишет точно такой же метод в своём классе PartnerIntegration, потому что просто не увидит результат работы первого.

Этого удастся избежать, если использовать принцип единой ответственности:

Каждый класс должен выполнять только одну задачу

Давайте воспользуемся композицией, пусть класс заказа будет всего лишь интерфейсом для более специализированных классов:

class Order:
  def __init__(self):
    self.accounting = Accounting(order=self)
    self.payment = PaymentSystem(order=self)
    self.shipment = Shipper(order=self)
    self.notifications = NotificationsDispatcher(order=self)

Мы разграничили ответственность за разные участки программы между разными классами. Теперь новому программисту гораздо легче догадаться, что расчёт НДС вызывается через order.accounting.get_vat(), а уведомление в Телеграме об успешном заказе он сразу полезет искать в order.notifications.

Этот приём можно применять и к нижележащим классам. Класс, который в примере выше отвечает за уведомления, называется NotificationDispatcher, и сразу понятно, что его задача — рассылать сигналы об изменениях в остальные части приложения. Можно послать один сигнал «заказ создан», чтобы на его основе сделали свою работу несколько классов — к примеру, уведомлятель в Телеграме и присылатель приветственного письма пользователю.

P. S. Это был совет об управлении разработкой. Хотите больше знать о планировании спринтов, управлении продуктом или о настройке инфраструктуры? Присылайте вопросы.

Управление проектомВеб‑разработка
Полезно
 6
6
Непонятно
 5
5
Войдите в Бюросферу, чтобы голосовать
Отправить
Поделиться
Поделиться
Запинить
Твитнуть

Комментариев пока нет

Цель рубрики — обсуждение вопросов дизайна, веб-разработки, переговоров, редактуры и управления.
Комментарии модерируются. Мы публикуем комментарии, которые добавляют к уже сказанному новые мысли и хорошие примеры.

Рекомендуем другие советы