Мы рассмотрим два очень простых и практичных безопасных метода, которые вы можете начать применять уже сегодня. Если вы профессиональный разработчик, вы наверняка уже их используете. Однако тем, кто ещё не достиг профессионального уровня, эти методы помогут улучшить качество кода и сделать его безопаснее.
Если вы никогда не слышали о безопасном программировании, самое время узнать о нём. Вот вкратце его суть:
Безопасное программирование позволяет программному обеспечению вести себя правильно несмотря на некорректный ввод.
Хорошо, давайте посмотрим, как же можно этого достичь.
Граничные операторы — проверка предварительных условий
Эти однострочные скрипты — одни из краеугольных камней безопасного программирования. Они располагаются в верхней части наших методов, следя за тем, чтобы методы выполнялись только тогда, когда предоставлен верный ввод.
Они — проверка предварительных условий. Вот простой реальный пример:
Мы просто проверяем, предоставил ли вызывающий оператор ненулевое или пустое значение. Обычно мы делаем это, если ввод подобных значений может привести к неожиданным результатам.
Нам нужно рефакторить этот код, чтобы применить другой подход к граничным операторам для случаев, когда методы начинают принимать много аргументов или один аргумент вызывает несколько граничных операторов. Подобный рефакторинг может включать в себя создание объекта, содержащего все необходимые свойства, а также метод IsValid()
. Здесь метод IsValid()
проверяет своё состояние, чтобы убедиться, что каждое свойство имеет допустимые значения:
Этот метод рефакторинга особенно полезен, когда вы обнаруживаете, что повторяете одни и те же граничные операторы в нескольких методах. Например, объект-спецификация позволяет вам фиксировать бизнес-правила в одном месте.
Утверждения внутри методов
Вы хорошо знакомы с утверждениями, выражениями в конце модульных тестов. В безопасном программировании они не ограничиваются только тестированием.
Скорее всего мы будем вызывать другие методы класса и даже методы, предоставленные внешними библиотеками. В таких случаях стоит проверить, верны ли наши предположения о том, что эти методы делают или какие значения возвращают, прежде чем продолжать выполнение метода.
Мы предвосхищаем ошибки. Добавляя if
после вызова метода Save()
базы данных, мы эффективно подтверждаем, что произошло, и действуем соответственно. Никаких сюрпризов.
Читайте также:
- 7 шагов до уровня Моцарта кода
- 5 недооценённых приложений в помощь программисту
- Парное программирование: недостатки, которые предпочитают умалчивать
Читайте нас в Telegram, VK и Яндекс.Дзен
Перевод статьи Nicklas Millard: 2 Defensive Coding Techniques You Should Use Today