При проектировании общедоступного API общей библиотеки, сколько из низкоуровневого материала, который используется внутри, должен быть представлен? С одной стороны, пользователи не должны слишком сильно зависеть от деталей реализации, и слишком много низкоуровневых функций / классов могут загромождать API. Следовательно, ответ коленного рефлекса может быть «нет». С другой стороны, некоторые из низкоуровневых функциональных возможностей могут быть полезны людям, и раскрытие большего их количества может предотвратить инверсию абстракции (повторное внедрение низкоуровневых конструкций поверх высокоуровневых конструкций).
Кроме того, раскрытие более низкоуровневых деталей может обеспечить сокращение производительности. Например, допустим, у вас есть функция для нахождения медианы массива. Принцип наименьшего удивления гласит, что вы должны дублировать массив, чтобы пользователи вашего API не заботились о том, что его реализация связана с побочным эффектом переупорядочения элементов. Следует ли вам в этом случае отметить, что median () стоит выделение памяти и предоставляет другую функцию, которая обходит выделение, но произвольно переупорядочивает ввод пользователя?
Каковы общие рекомендации относительно того, сколько деталей такого рода раскрыть?