Быть явным против неявного - это все, что вы скрываете, и что вы показываете.
В идеале вы раскрываете понятия, которые интересуют или интересуют пользователя (независимо от того, хотят они этого или нет).
Преимущество откровенности в том, что легче отследить и выяснить, что происходит, особенно в случае сбоя. Например, если я хочу вести журнал, у меня может быть API, который требует явной инициализации с каталогом для журнала. Или я могу использовать значение по умолчанию.
Если я укажу явный каталог, и он потерпит неудачу, я пойму почему. Если я использую неявный путь, и он терпит неудачу, у меня не будет представления о том, что пошло не так, почему или где искать, чтобы это исправить.
Неявное поведение почти всегда является результатом сокрытия информации от потребителя. Иногда это правильно, например, когда вы знаете, что в вашей среде есть только один «ответ». Однако лучше знать, когда вы скрываете информацию и почему, и убедитесь, что вы позволяете своим клиентам работать ближе к их уровню намерений и не пытаться скрыть элементы существенной сложности.
Часто неявное поведение является результатом "самоконфигурирования" объектов, которые смотрят на свое окружение и пытаются угадать правильное поведение. Я бы вообще избегал этого паттерна.
В целом одно правило, которому я, вероятно, следую, заключается в том, что для данного API любая операция должна быть либо явной, либо неявной, но не комбинацией. Либо сделайте операцию тем, что должен сделать пользователь, либо сделайте это чем-то, о чем им не нужно думать. Когда вы смешаете эти два, вы столкнетесь с самыми большими проблемами.