Должен ли я использовать среду по умолчанию для тех, кто использует мою библиотеку? - PullRequest
6 голосов
/ 05 марта 2012

У меня были дебаты с другом, где у меня есть библиотека (ее python, но я не включил ее в качестве тега, так как вопрос применим к любому языку), которая имеет несколько зависимостей. Спор заключается в том, предоставить ли среду по умолчанию при инициализации или заставить пользователя кода явно установить ее.

Мое мнение состоит в том, чтобы заставить пользователя быть явным, избегать путаницы и прояснять, на что он указывает.

Мой друг, это безопаснее и удобнее по умолчанию для среды и позволяет пользователю переопределять, если он хочет.

Мысли? Есть ли хорошие ссылки или примеры / шаблоны в популярных библиотеках, которые поддерживают любой из наших аргументов? также, какие-нибудь популярные блоги или статьи, которые обсуждают эту точку разработки API?

Ответы [ 4 ]

6 голосов
/ 05 марта 2012

У меня нет ссылок, но вот мои мысли как потенциального пользователя указанной библиотеки.

Я думаю, что хорошо иметь конфигурацию по умолчанию, позволяющую разработчикам быстро оценить библиотеку.Я не хочу проходить кучу настроек, чтобы посмотреть, будет ли библиотека делать то, что мне нужно.Как только я буду рад, что библиотека будет делать то, что мне нужно, я буду рад настроить ее так, как я хочу.

Хороший пример - ASP.Net MVC Framework от Microsoft.Когда вы создаете новый проект MVC, он подключается к провайдеру аутентификации и членству по умолчанию, который позволяет разработчику очень быстро запустить работающее приложение.Также легко настроить использование разных провайдеров, если они по умолчанию не соответствуют требованиям рассматриваемого приложения.

В качестве немного другого примера, Atlassian Confluence - это вики-программа, которая поддерживает множество различныхконец базы данных.Atlassian мог бы выбрать не иметь конфигурации БД по умолчанию, но вместо этого Confluence поставляется с стандартной простой файловой базой данных, позволяющей пользователям оценивать программное обеспечение.Для производственных установок вы можете подключиться к Oracle, SQL Server, mySQL или как угодно.

Могут быть случаи, когда конфигурирование по умолчанию для библиотеки на самом деле не имеет смысла, но я думаю, что этобыть частным случаем, а не общим правилом.

3 голосов
/ 29 апреля 2012

Это зависит.Если вы можете предоставить разумные значения по умолчанию, вы можете сделать это: это облегчит жизнь случайному пользователю библиотеки, поскольку они могут устанавливать только соответствующие настройки, в отличие от всей среды (с возможными настройками, последствия которых онине полностью понимаю (пока)).Вы правы, что в ситуациях, когда это возможно, это может привести к разочарованию и путанице, поскольку настройки по умолчанию могут вызвать неожиданное поведение (неожиданное для (неопытного) пользователя) - вы должны сопоставить уменьшенное разочарование удобства с ценой не-понятные значения по умолчанию, позволяющие сделать выбор для каждой из этих настроек по умолчанию, которые могут повлиять на выбор других связанных настроек

С другой стороны, если нет разумных значений по умолчанию (например, DBучетные данные, удаленный адрес), вы должны требовать, чтобы пользователь предоставил эти настройки.

Ключ в обоих случаях заключается в предоставлении достаточного количества информации в документации библиотеки и в сообщениях об ошибках (либо для отсутствующих настроек, либо для конфликтующих).те), что пользователь может выяснить, что на самом деле означают эти настройки / контроль без необходимости читать исходный код библиотеки.Эта часть сложна, потому что 1) она обычно утомительна с точки зрения разработчика библиотеки (поэтому ее часто экономят) и 2) документация должна быть написана с позиции новичка в библиотеке, которая часто отличаетсяисходя из мышления разработчика библиотеки - последний знает неявные связи / последствия, первый должен быть рассказан о них понятным образом.

1 голос
/ 04 мая 2012

Хотя это не совсем идентично с точки зрения проблемной области, это выглядит как аргумент Соглашение о конфигурации .

В последние годы за КоК был довольно большой импульс, и, на мой взгляд, это имеет большой смысл. Пока гибкость не потеряна, у вас есть все, чтобы получить. Все, что нам нужно, - это разработка с меньшим трением, и, если мне нужно настроить каждый аспект вашего API, чтобы он работал, я менее склонен использовать его поверх другого API с аналогичной функциональностью.

Мне нравятся подкасты Гансельмана, поэтому, если вы хотите немного легкого прослушивания, посмотрите этот подкаст .

0 голосов
/ 06 мая 2012

Я думаю, ваш вопрос нуждается в уточнении. Для начала, я не думаю, что библиотека должна иметь какую-либо конфигурацию времени выполнения. С точки зрения зависимостей, библиотечные зависимости должны обрабатываться способом, соответствующим среде, для которой они пишутся. В python эти зависимости должны быть в файле setup.py (в соответствии с требованиями), и в конечном итоге этот файл должен соответствовать требованиям любого сервиса, который вы планируете сделать доступным (например, pypi для python).

Для приложений вполне нормально требовать настройки времени выполнения, но вы должны попытаться использовать разумные значения по умолчанию. Если ваше приложение зависит от библиотек, эта зависимость должна обрабатываться таким же образом, как и библиотечная зависимость, даже если эта информация может быть избыточной в контексте установщика (при необходимости). По большей части скрипты первого запуска и их аналог должны быть отдельно от установщика / rpm.

Для веб-фреймворков типично, что ваше приложение будет иметь конфигурацию с ним, и, скорее всего, его нужно будет устанавливать не так, как традиционные приложения. Здесь, единственное, что вы можете сделать, это попытаться следовать соглашениям любой структуры, в которой вы пишете.

...