В основном речь идет о том, чтобы не принимать обязательства по клиентскому коду, если вам не нужно. Когда вы создаете метод общедоступным, то в некоторых контекстах, по крайней мере, вы обязуетесь не изменять его, не координируя код клиента.
Предположим, что вы делаете метод общедоступным, а кто-то его использует. Затем вы понимаете, что вам нужно изменить метод. Теперь у вас есть два варианта:
- Координаты с этим клиентом, чтобы внести изменения.
- Разбить клиента.
Очевидно, что вы хотите избежать # 2, если это возможно.
Для небольших систем # 1 может не быть большой проблемой. Но поскольку у вас больше кода клиента, в зависимости от вашего кода, №1 может стать действительно проблематичным. Кто-то может быть не готов поглотить ваши изменения по любой причине (расписание, бизнес-соображения, технические причины, что угодно).
Хороший способ избежать этой дилеммы состоит в том, чтобы избежать принятия обязательств, если нет причин для этого. Это действительно умная вещь, которую можно сделать в жизни вообще, даже вне программирования. Но это относится и к программированию: в отношении видимости это означает предпочтительную ограниченность видимости по сравнению с публичной видимостью.
Пример. Say Я пишу библиотеку управления заказами электронной коммерции, и я пишу метод
public double computeTax(double price) { ... }
даже несмотря на все налоговые расчеты библиотеки случаются внутри к библиотеке. Я просто делаю метод общедоступным, потому что считаю, что было бы позором не делиться моим налоговым калькулятором с миром.
Куча людей соглашается с тем, что этот метод замечательный, и создавать приложения, которые его используют.
Затем кто-то указывает, что совершенно неправильно использовать двойники для представления суммы в долларах (представления с плавающей точкой - это всего лишь приближения, что не выгодно для денег). Я решил, что я хочу, чтобы полностью избавиться от старого метода (не хочу, чтобы кто-то с помощью принципиально неправильно), и заменить его
public Currency computeTax(Currency price) { ... }
Но теперь я собираюсь разбить кучу кода клиента, который использует оригинальный метод.
Было бы лучше, если бы я просто спрятал свой крошечный налоговый калькулятор для себя, поскольку он не был частью того, что библиотека действительно предлагала в любом случае. Теперь я застрял с дилеммой.
Да. Потому что только «публичный» класс может быть замечен внешним миром. – lxcky
Ok - так что, если я хотел организовать позволяет сказать следующие классы - Класс-1: "Платформа" (MySQL/SQL Server/Oracle) - список платформ Класс-2: "DataStore" - class- 3: "Oracle" - создать - updateByHostService - listAll -Класс-4: "Salesforce" - создать - updateByURL - listAll Так что, если я обернуть все это в пакет, что рекомендуемый дизайн для открытый API этого пакета? и почему? (Я могу только думать о том, чтобы предоставить способ поделиться СОЮЗОМ всех методов отдельных классов - уверен, что это не круто) СПАСИБО В РАМКАХ! –