TGViewer
Good dev knows Good dev knows @gooddevknows · 2K subscribers
Post #87 2.97K
Defensive programming

Часто, когда мы разрабатываем программное обеспечение, мы фокусируемся на таком сценарии, где все идет как надо — happy path. С опытом, приходит понимание, что даже если обычно все идет как надо, то 100% будут случаи, когда что-то пойдет не так. Хороший разработчик старается учитывать наиболее важные ситуации, когда что-то идет не так.

Одна из техник, которая может помочь при обработке нестандартных ситуаций называется defensive programming. Это вариант дизайна ПО, когда мы обрабатываем исключения или ошибки так, что программа старается продолжить работу даже при этих нежелательных обстоятельствах.

Например, у нас есть uuid пользователя, мы знаем, что пользователь существует и наш сервис делает запрос к другому сервису /users/{uuid}. Но вдруг мы получаем 404, что делать? Мы ведь уверены, что пользователь существует. Возможно пользователь просто не успел создаться, потому что операция создания пользователя асинхронная.

Применив defensive programming, мы можем запрограммировать повтор запроса (лучше с экспоненциальной задержкой и ограничением количества повторов). В таком случае мы еще раз попробуем получить данные про пользователя через 1, 2, 3 секунд ⏳. Если после пятой попытки все еще возвращается 404, то можно и упасть — записать сообщение в лог и ответить 500 клиенту.

Defensive programming хорошо подходит там, где мы не контролируем входные данные. Например, при обработке форм, куда пользователи вводят данные, мы можем санитизировать данные (делать их безопасными) или нормализировать данные (приводить их к тому формату, который нам нужен). И только потом — валидировать. Never trust user input.

⬛️ Еще раз — здорово, когда программы не падают из-за любой ошибки. Чтобы этого достичь, Хороший разработчик, предусматривает обработку нестандартных ситуаций, чтобы программа продолжила свою работу. Это способствует high availability.

Вы используете defensive programming? Пишите в комментариях. В следующую среду поговорим про offensive programming 🤺.

#хардскиллы, 🌄Instagram |🤝Patreon
  • 👍 17
More from @gooddevknows
  1. Aug 27, 2026🛰 Я придбав Starlink! Ще поза-вчора вранці я не збирався купляти ніякий Starlink. Але, пр…
  2. Jul 1, 2026photo post
  3. Jul 1, 2026✨ Crash Course: Storytelling для інженерів ✨ 📅 9 — 13 липня 2026 1️⃣ Чому історії працюют…
  4. Jul 1, 2026Post #278
  5. Apr 1, 2026We have one ticket left for: https://fwdays.com/event/tech-lead-course-5 . Code LIFE_BY_PP…
  6. Mar 9, 2026Hi friends, For those who have missed it, I now regularly post in my 🇺🇦 channel: https:/…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →