Чем более общедоступными являются ваши методы (и типы), тем большему объему кода они подвергаются. Это увеличивает вероятность того, что другой код (даже код, находящийся под контролем вашей компании) запустится в зависимости от того, что этот код работает так, как он работает в настоящее время... что ограничивает гибкость для изменения реализации позже.
Чтобы привести конкретный пример, я работаю над проектом с открытым исходным кодом под названием Noda Time. По общему признанию, у нас еще не было нашего первого общедоступного релиза, но недавно я внес множество изменений в различные внутренние типы, включая довольно значительное изменение иерархии типов и даже удаление методов. Если бы это были общедоступные типы или общедоступные методы (и если бы мы уже перешли к версии 1.0), то мы могли бы сломать код, зависящий от этой конкретной реализации.
Скрывая все, что вы не знаете, чтобы быть полезным для клиентов, вы покупаете себе большую гибкость. Невероятно важно тщательно продумать свой общедоступный API, потому что его очень сложно изменить позже, но если вы сохранили большую часть своей реализации внутри, вы можете провести рефакторинг по своему усмотрению, чтобы сделать его более элегантным, более гибким или, возможно, более быстрым... и все это без нарушения кода в зависимости от вашей библиотеки.
Очевидно, что некоторые вещи должны быть раскрыты — по крайней мере, в библиотеках классов, — но вы должны быть осторожны с тем, насколько вы раскрываете, если только вы не хотите позже сломать все вызывающие объекты (или жить с каждым решением, которое вы принимаете). делать, навсегда).
person
Jon Skeet
schedule
19.09.2011
Math
может/должно бытьstatic
- person Henk Holterman   schedule 19.09.20114
и10
? :) - person Miserable Variable   schedule 19.09.2011