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

Действительно ли ваш Java-код готов к работе?

Предотвратите ошибки в сложных общих приложениях Java с помощью этих простых советов. Помеченный java.

Действительно ли ваша Java готова к прайм-тайму в производстве?

Вот пять советов по написанию Java, которые могут противостоять злоупотреблениям ваших пользователей!

Писать тупой код

Моя статья Почему старшие разработчики пишут тупой код и как определить младшего за милю по-прежнему часто публикуется в Твиттере, хотя ему почти два года. Совет писать тупой код принадлежит не мне, а архитектору Java Брайану Гетцу, который сказал :

Часто способ написания быстрого кода в приложениях Java заключается в написании тупого кода — кода, который является простым, чистым и следует наиболее очевидным объектно-ориентированным принципам.

Это продолжение принципа KISS и в основном означает: избегайте быть умным. Напишите простой код так, как он должен был быть написан. Знать и писать эффективную Java .

Но у “тупого кода” есть еще одно преимущество: компилятор знает, как его оптимизировать. Таким образом, вы также получаете повышение производительности.

Начните с самого защитного варианта

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

Между тем, в большинстве учебных пособий по Java будут приведены примеры классов, в которых используется единственный модификатор доступности public . Генерация классов IDE также, по-видимому, по умолчанию используется для общедоступных классов и методов. Если вы полностью создадите класс в среде IDE, у вас обязательно получится что-то вроде этого:

public class Contact {
    private String name;
    private String emailAddress;

    public Contact(String name, String emailAddress) {
        this.name = name;
        this.emailAddress = emailAddress;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmailAddress() {
        return emailAddress;
    }

    public void setEmailAddress(String emailAddress) {
        this.emailAddress = emailAddress;
    }
}

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

Кроме того, по умолчанию используется значение package-private для любых конструкторов или методов. Может быть полезно просмотреть Модификаторы доступа Java .

Таким образом, предыдущий код становится следующим, прежде чем он станет чем-то еще:

class Contact {
    private final String name;
    private final String emailAddress;

    Contact(String name, String emailAddress) {
        this.name = name;
        this.emailAddress = emailAddress;
    }
}

Разработчик, пишущий подобный код, думает о масштабах и неизменности в обороне, и это хорошо. Более того, это подводит меня к следующему пункту.

Предпочитаю разоблачать поведение, а не состояние

Возможно, вы заметили, что вы ничего не можете сделать с экземпляром Contact это написано в соответствии с моим руководством “отправная точка”. Точно! Так что вам может быть интересно, куда вы пойдете дальше? И мой ответ таков: предпочитаю раскрывать поведение, а не состояние .

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

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

public class Contact implements Emailable {
    // ...

    @Override
    public EmailResult sendEmailTo(Contact destination, String body) {
        // ...
    }
}

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

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

Пишите комплексные тесты

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

Java в больших сложных приложениях следует считать ошибочным, пока не будет доказано обратное.

Познакомьтесь с тестовой платформой, такой как JUnit , и связанными с ней инструментами, такими как Mockito .

Два отличных ресурса для изучения отличных методов тестирования включают Шаблоны тестирования xUnit Джерарда Месароша и Прагматичное модульное тестирование в Java 8 Джеффа Лангра.

Исправлены предупреждения о линтере и IDE

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

Проверки кода IntelliJ , любезно предоставлено IntelliJ Help

Производственная Java!

Следуя этим советам, вы получите готовую к работе Java! То есть: Ява, способная противостоять дикой природе. Java – отличный язык с полезным компилятором и мощной экосистемой инструментов и библиотек, помогающих повысить и гарантировать качество. Следуя лучшим практикам и используя эти инструменты, я уверен, что любое приложение можно улучшить, и вы, как разработчик Java, сможете заняться тем, что важно – созданием своего приложения, – вместо того, чтобы тратить все свое время на исправление ошибок, которые могли быть обнаружены ранее. Удачи!

Оригинал: “https://dev.to/scottshipp/is-your-java-code-really-production-ready-ogp”