Я создаю новый проект библиотеки Python, который будет использоваться несколькими моими проектами приложений. Существующий код использует переменные среды для различных параметров конфигурации. Должен ли мой библиотечный проект читать конфигурацию из переменных среды? Я всегда знал, что библиотеки не должны делать предположений о среде, в которой они работают. Каков наилучший способ обеспечить конфигурацию проектов библиотек из приложений/сред, которые их используют?
Не существует единственного лучшего способа, поскольку он зависит от архитектуры библиотеки. Чтение переменных среды непосредственно в коде библиотеки также проблематично для написания модульных тестов, что является еще одной причиной избегать этого, если это возможно. Это не полный список, но это хорошее начало:
Создайте класс «config», который могут использовать другие классы или функции в вашей библиотеке. Пользователи вашей библиотеки могут инициализировать этот объект конфигурации по своему усмотрению.
Льготы:
Недостатки:
Создайте функцию «config», которая принимает все настройки в качестве аргументов. Затем эта функция конфигурации может устанавливать переменные или свойства, которые являются внутренними для вашей библиотеки.
Льготы:
Недостатки:
Добавьте дополнительные параметры в функции для этих настроек.
Льготы:
Недостатки:
Объедините варианты 1 и 2. Это может быть промежуточным шагом, если вы хотите предоставить клиентам понятный интерфейс для настройки вашей библиотеки во время рефакторинга кода для поддержки внедрения зависимостей. Потребители инициализируют объект конфигурации, а затем передают его функции конфигурации. Функция config может задавать внутренние переменные или свойства и может подвергаться постоянному рефакторингу по мере того, как ваша библиотека начинает поддерживать внедрение зависимостей.
Льготы:
Недостатки:
Преимущества отделения вашей библиотеки от источника конфигурации определенно стоят любого рефакторинга или перепроектирования, которые могут потребоваться. Какой вариант вы выберете, зависит от того, насколько терпимы потребители к критическим изменениям. Как и в случае с любыми критическими изменениями, сообщайте об этом как можно раньше и общайтесь часто.