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

Вступающий в силу Java Вторник! В Общедоступных Классах Используйте Средства Доступа, А Не Общедоступные Поля

Погружение в шестнадцатую главу “Эффективная Java”. Помеченный как java, эффективный, инкапсуляция, архитектура.

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

Суть того, к чему сводится эта глава, заключается в том, чтобы противостоять желанию сделать поля класса общедоступными. Делая эти элементы доступными, мы отказываемся от инкапсуляции класса и всех преимуществ, которые он приносит. Вы не можете изменять представление данных, применять инварианты или выполнять другие действия при обращении к полю. В то время как многие хардкорные объектно-ориентированные программисты, как выразился Effective Java, скажут, что все поля должны иметь средства доступа, и ни одно из них не должно быть доступно вне класса Эффективная Java в некоторых случаях не согласна. Хотя он согласен с тем, что так должно быть в случае с public classes, он предполагает, что в этом может не быть необходимости для классов package-private и private. Основная причина такого шага заключается в том, что вы можете избежать визуального беспорядка, сохраняя при этом безопасность, поскольку радиус взрыва невелик, когда необходимо внести изменения. Это зависит от вас и вашей организации, согласны ли вы (ниже я поделюсь способом уменьшить беспорядок).

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

Наконец, как мы можем уменьшить визуальный беспорядок аксессуаров? Как неоднократно говорилось в этой серии блогов, Ломбок снова приходит на помощь. У Ломбока есть @Getter и @Setter аннотации, которые работают именно так, как они звучат, предоставляют геттеры и сеттеры. Это обеспечивает очень низкий уровень беспорядка в вашем коде, и вы по-прежнему получаете возможность позже самостоятельно реализовать метод и применять инварианты, выполнять вспомогательные действия и т.д.

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

Оригинал: “https://dev.to/kylec32/effective-java-tuesday-in-public-classes-use-accessors-not-public-fields-3hm2”