У меня есть несколько классов, таких как классы, которые описывают структуру таблицы базы данных, или классы, которые описывают конфигурацию приложения, которые вообще не меняют состояние во время выполнения программы. В настоящее время у меня есть эти классы как синглтоны, и классы, которые хотят получить информацию, запрашивают экземпляры классов (например, из общего метода getInstance ()), а затем приступают к извлечению информации, которую они хотят. Хотя это работает, я надеялся дать больше модульности, когда дело доходит до конфигураций, и именно здесь я застрял.
Моя главная цель - облегчить отладку с помощью модульной конфигурации, сохраняя читабельность кода. Я не уверен, как я позволю возможность менять конфигурацию для отладки, не добавляя еще один синглтон (tm), из которого классы, использующие параметры конфигурации, могут извлекать нужные экземпляры конфигурации.
Это для веб-приложения PHP, но оно не помечено как таковое, потому что, я думаю, решение, скорее всего, не будет зависеть от языка.
Редактировать: Чтобы прояснить мой вопрос, даже несмотря на то, что внедрение зависимостей щекочет мою фантазию в том, что касается ответов на мой вопрос, позвольте мне привести (возможно, упрощенный) пример.
Допустим, у меня есть оболочка для PHP-класса Mysqli, которая будет просто использовать любую информацию о соединении, указанную в синглтоне Config ...
class Mysql {
// ...
private $mysqli;
public function __construct() {
$conf = Config::getInstance(); // Get the configuration
$this->mysqli = new Mysqli(
$conf->getHost(),
$conf->getUsername(),
$conf->getPassword()
);
// ...
}
// ...
}
В этом примере класс Mysql будет принимать только те параметры, которые содержатся в Config, и невозможно использовать любую конфигурацию, кроме той, которая содержится в Config. В этом примере, возможно, имеет смысл просто вставить хост / имя пользователя / пароль / что-либо еще в конструктор, но затем он падает на клиент, использующий класс Mysql для извлечения его из синглтона Config, и проблема снова проявляется во многих больше классов. Поскольку в конечном итоге он всегда извлекает зависимости из Config, с этой настройкой невозможно легко попробовать другие настройки.
Из того, что я читал в нескольких местах, включая замечательные комментарии здесь, кажется, что внедрение зависимостей - моя лучшая ставка. Для будущих читателей в будущем, одна прекрасная статья о внедрении зависимостей в отношении PHP я обнаружил здесь вместе с упрощенным введением в концепцию (в Java) здесь .