Я прочитал кучу лучших практик в Интернете для JUnit и Java в целом, и большой, который люди хотели бы отметить, это то, что поля и методы должны быть закрытыми, если вам действительно не нужно позволять пользователям обращаться к ним. Переменные класса должны быть частными с геттерами и сеттерами, и единственными методами, которые вы должны раскрывать, должны быть те, которые пользователи будут вызывать напрямую.Частно необходимо для автономного приложения Java?
Мой вопрос: насколько строго необходимы эти правила, когда у вас есть такие вещи, как автономные приложения, у которых нет пользователей? В настоящее время я работаю над тем, что будет запускаться на сервере, возможно, раз в месяц. Существуют файлы конфигурации, которые приложение использует, которые можно изменить, но в противном случае нет реального взаимодействия с пользователем после его запуска. Я в основном придерживался лучших практик, но сталкивался с проблемами с модульным тестированием. Много времени, когда мне кажется, что я просто прыгаю через обручи, когда мое подразделение тестирует все в порядке, и было бы намного проще, если бы этот метод или что-то было публичным или даже защищенным.
Я понимаю, что инкапсуляция облегчит внесение изменений за кулисами, без необходимости менять код на всем протяжении, но без воздействия на пользователей это кажется немного более надуманным. Я просто делаю свою текущую работу более сложной, невзирая на то, что это спасет меня позже. Я также видел все ответы на этом сайте, говорящие, что если вам нужно провести тестирование частного метода, вы делаете что-то неправильно. Но это основано на идее, что эти методы всегда должны быть частными, и это то, что я допрашиваю.
Если я знаю, что никто не будет использовать приложение (вызывая его методы из jar или API или что-то еще), что-то не так с тем, чтобы все было защищено? Или даже публично? Как насчет сохранения частных полей, но каждый способ публиковать? Где баланс между «правильной» доступностью на куски кода и простотой использования?
Нужно ли это? Нет. Нет ничего, что помешало бы вам писать плохой код. Является ли это еще лучшей практикой? Абсолютно. – bradimus
Каждый метод должен использовать ** наиболее ** ограничительный ** соответствующий ** уровень доступа. Если каждый метод является 'private', то у вас нет' public' интерфейсов (не особенно полезно), но если каждый метод является 'public', то он является частью API (и должен поддерживаться/поддерживаться). Это длинный способ сказать, что ** всегда будет ** *** зависеть от контекста. Наконец, вы не должны создавать поля 'public' (потому что, как вы заметили, это нарушает принцип инкапсуляции). –
Он также уменьшает сложность кода и упрощает управление. Отличный пост здесь: http://programmers.stackexchange.com/questions/143736/why-do-we-need-private-variables –