Рубрики
Без рубрики

5 простых приемов кодирования, которые сделают ваше приложение более стабильным

Статья, первоначально размещенная на моем личном веб-сайте в разделе “5 приемов кодирования, чтобы сделать ваше приложение более… Помеченный как java, кодирование, лучшие практики.

Статья, первоначально размещенная на моем личном веб-сайте в разделе 5 советов по кодированию, чтобы сделать ваше приложение более стабильным

Стабильность вашего приложения или веб-сервиса важна как для вас, так и для пользователя. Сделать вещи устойчивыми непросто, но есть несколько приемов кодирования, которые вы можете использовать, чтобы повысить стабильность и помочь вам решать проблемы проще и быстрее. Вот 5 простых приемов кодирования, которые сделают ваше приложение более стабильным, уменьшат количество ошибок и сделают вас лучшим программистом.

Сравнение со статической строкой

Во многих приложениях в какой-то момент вам потребуется сравнить строку, которую вы храните в своей переменной, с предопределенным значением. Это распространенный сценарий, и его действительно легко ошибиться, особенно для начинающих, и он может привести к ошибкам, которые, если их не обработать должным образом, могут привести к сбою вашего приложения. Как ты можешь ошибаться в такой простой вещи? Давайте рассмотрим следующий пример:

public void doSomething(String parameter) {
    if (parameter.equals("new")) {
        // do something only in this case
    }
    // do some more stuff
}

Выглядит правильно, верно? Что ж, такой подход скрывает исключение NullPointerException, которое может происходить довольно часто. Если по какой-либо причине “параметр” неинициализирован и остается нулевым, это вызовет NPE. Исправить это довольно просто.

Во-первых, давайте извлекем значение, которое мы хотим проверить. Далее, при выполнении нашего сравнения, вместо того, чтобы сначала использовать параметр, мы используем наше извлеченное значение, так как мы знаем, что оно ВСЕГДА инициализируется. Новый и намного лучший код выглядит следующим образом:

private static final String NEW_PARAMETER = "new";

public void doSomething(String parameter) {
    if (NEW_PARAMETER.equals(parameter)) {
        // do something only in this case
    }
    // do some more stuff
}

Используйте необязательно, когда может быть возвращен null

Одной из функций, которая была введена в Java 8, был необязательный класс. Несмотря на то, что это может показаться не так много, этот класс-оболочка может быть чрезвычайно полезен для упрощения понимания кода, а также для обеспечения стабильности кода. Это связано с тем, что Необязательный может представлять две различные причины.

Когда в качестве части метода у вас есть необязательный параметр, это указывает на то, что этот метод может работать должным образом, даже если вы не знаете или не имеете значения для этого параметра. Вы можете просто использовать Optional.empty(), и метод будет, по крайней мере теоретически, хорошо работать, присваивая значение по умолчанию или игнорируя этот параметр.

Однако, если метод возвращает необязательное значение, это указывает на то, что метод не может вернуть ответ в некоторых сценариях. До Java 8 это делалось путем возврата значения null, которое может привести к NullPointerExceptions. С помощью опции четко указывается, что ответ предоставляется не всегда. Кроме того, он сообщает любому, кто использует этот API/метод, что результат должен быть проверен с помощью is Present(), и только в этом случае вы должны использовать результат.

Да, плохие программисты все еще могут просто позвонить .get () без проверки, но это должно быть легко обнаружено во время проверки кода или с помощью инструментов статического анализа. Это не полностью решает проблему, но, по крайней мере, должно заставить любого дважды подумать, когда возвращается необязательный параметр. Простой факт, что вам нужен дополнительный вызов для получения значения, помогает избежать случайного возникновения нулевых исключений.

Избегайте Проглатывания Исключений

С этой проблемой я сталкивался много раз, особенно в устаревших системах. Это то, что легко упустить из виду, и, хотя это не вызывает никаких проблем с фактическим потоком обработки, это чрезвычайно затрудняет расследование и исправление. Для тех, кто не знает, проглатывание исключений – это способ скрыть возникновение исключения, не регистрируя его. Это лучше всего объяснить на примере ниже:

public boolean processData() {
    try {
        ...
        myService.process(); // this will thrown an exception sometime
        ...
    } catch(Exception e) {
        return false;
    }
    return true;
}

В этом примере служба может выдать исключение. Когда это происходит, мы перехватываем это, так что никаких проблем с потоком обработки нет, но мы ничего не регистрируем. Для того, кто позже проведет расследование, чтобы выяснить, почему обработка не произошла, у него не будет никакой доступной информации. Это еще хуже, если тот же результат (в данном случае false) может быть возвращен в блоке try{}.

Некоторые пытаются исправить это, просто регистрируя сообщение об ошибке, как в примере справа. Это, однако, на самом деле не делает ситуацию лучше. Да, вы знаете, что произошла ошибка при обработке данных, но не более того. Что же произошло на самом деле? что вызвало ошибку? Как я могу воспроизвести это? Ниже показано, как правильно исправить это и избежать проглатывания исключений. Вот почему все методы регистратора имеют Throwable в качестве параметра. Таким образом, у вас действительно есть трассировка стека, напечатанная в журналах, и вы можете знать, где возникла проблема, и, если повезет, точную причину.

public boolean processData() {
    try {
        ...
        myService.process(); 
        ...
    } catch(Exception e) {
        LOGGER.error("Error processing data");
        return false;
    }
    return true;
}
public boolean processData() {
    try {
        ...
        myService.process(); // this will thrown an exception sometime
        ...
    } catch(Exception e) {
        LOGGER.error("Error processing data", e);
        return false;
    }
    return true;
}

Иметь окончательное всеобъемлющее утверждение

Иногда может быть очень трудно заранее увидеть все ошибки и исключения, которые могут возникнуть. Возможно, API изменился в библиотеке, которую вы используете, после обновления до более новой версии, или, возможно, другой член команды был ленив и забыл где-то добавить catch. Вот почему важно иметь оператор catch, который инкапсулирует все ваше приложение или службу.

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

Тем не менее, попробуйте создать всеобъемлющую инструкцию, в которой все, что пошло не так, должным образом регистрируется, и программа завершается изящным способом.

Не изобретайте велосипед заново

Независимо от используемого вами языка программирования, существует большая вероятность того, что вы найдете библиотеки для многих распространенных задач и функций, которые вам предстоит создать. Когда это возможно, используйте их. Не пытайтесь изобретать велосипед заново и писать все самостоятельно. В большинстве случаев код, присутствующий в таких библиотеках, более надежен, хорошо обрабатывает ошибки и обладает большей функциональностью, чем вы изначально думаете, что вам нужно.

Убедитесь, что библиотека находится в хорошем состоянии, и, если вы создаете коммерческий проект, проверьте лицензию. Нужно разобрать текст в формате JSON? Для этого есть библиотека. Хотите протестировать свой код? Для этого также существуют рамки. Как разработчик, вам не нужно писать все с нуля, но вы знаете, какие ресурсы использовать и когда, чтобы создать свое видение и программное обеспечение.

Статья, первоначально размещенная на моем личном веб-сайте в разделе 5 советов по кодированию, чтобы сделать ваше приложение более стабильным

Оригинал: “https://dev.to/pazvanti/5-simple-coding-tricks-to-make-your-application-more-stable-10pk”