Публичная публикация позволяет другому коду полагаться на него.
Не имеет значения, являются ли данные изменяемыми или неизменными.Как только какой-то другой код становится зависимым от этой информации, вы разрешаете будущие проблемы.И в любом более крупном проекте эти проблемы рано или поздно проявятся.
Обнародование информации, внезапно, (внутренние) детали реализации могут проникнуть в другой код!И конечно: если эти данные изменчивы, это просто открывает реальную банку с червями.
Но даже простой if (someObject.someField == whatever) then do this else do that
может быстро превратиться в огромную проблему.Предположим, у вас есть этот код в 10, 50, 100 разных местах вашего огромного проекта.
Таким образом, ваше правило по умолчанию : скрыть информацию.Делая вещи публичными является исключением , это происходит потому, что вы абсолютно хотите, чтобы ваш дизайн был таким.Ваше значение по умолчанию должно предоставить вашим полям (и даже методам) наиболее ограниченную видимость, которая все еще позволяет вам выполнять ваши требования.
И обратите внимание: просто «немного» лучше спрятать поле и использовать для него метод доступа.Потому что if (someObject.someMethod() == ...)
приводит к таким же проблемам.И (почти) хуже: теперь вы решаете, что someMethod()
должен сделать что-то другое, чтобы решить одну конкретную проблему.Но уверены ли вы, что другие 99 использования этого вызова метода хорошо работают с этим изменением?что-то общедоступное, но все еще не используемое извне вашего модуля.Но это скорее теоретическое дополнение, я бы все равно пошел с базовым правилом и не обнародовал ничего, если у меня нет веских причин для этого.Если вы хотите получить доступ к этой информации, скажем, для модульных тестов, тогда подойдет защищенный метод получения пакетов.