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

Эффективная Java! Ограничить исходные файлы одним классом верхнего уровня

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

Сегодня мы рассмотрим тему, аналогичную теме с прошлой недели, где мы рассматривали вложенные классы. На этот раз мы рассмотрим несколько классов верхнего уровня в одном исходном файле. Разница между тем, что мы рассматриваем сегодня, и тем, что мы рассматривали на прошлой неделе, заключается в том, что эти классы находятся на том же уровне, что и “базовый класс”. Вы можете даже не знать, что у вас может быть несколько классов верхнего уровня в исходном файле (у вас может быть только один класс верхнего уровня public в исходном файле), и, согласно этой главе, это нормально, потому что вы не должны использовать эту возможность.

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

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

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

Оригинал: “https://dev.to/kylec32/effective-java-limit-source-files-to-a-single-top-level-class-1g7g”