Как вы организуете и управляете своими вспомогательными объектами, такими как механизм базы данных, уведомления пользователей, обработка ошибок и т.д. в объектно-ориентированном проекте на основе PHP?
Скажем, у меня есть большая PHP CMS. CMS организован в различных классах. Несколько примеров:
- объект базы данных
- управление пользователями
- API для создания/изменения/удаления элементов
- объект обмена сообщениями для отображения сообщений конечному пользователю
- обработчик контекста, который приведет вас к правильной странице
- класс панели навигации, отображающий кнопки
- объект регистрации
- возможно, пользовательская обработка ошибок
и др.
Я имею дело с вечным вопросом, как лучше сделать эти объекты доступными для каждой части системы, которая в ней нуждается.
мой первый опыт, много лет назад, состоял в том, чтобы иметь глобальное приложение $, содержащее инициализированные экземпляры этих классов.
global $application;
$application->messageHandler->addMessage("Item successfully inserted");
Затем я перешел к шаблону Singleton и функции factory:
$mh =&factory("messageHandler");
$mh->addMessage("Item successfully inserted");
но я тоже этого не доволен. Модульные тесты и инкапсуляция становятся все более важными для меня, и в моем понимании логика глобалов/синглетов разрушает основную идею ООП.
Тогда есть, конечно, возможность дать каждому объекту несколько указателей на вспомогательные объекты, которые ему нужны, возможно, самый чистый, ресурсосберегающий и удобный для тестирования способ, но я сомневаюсь в его поддерживаемости в длинных запустить.
В большинстве фреймворков PHP я использовал либо синтаксический шаблон, либо функции, которые обращаются к инициализированным объектам. Оба прекрасных подхода, но, как я уже сказал, я не доволен ни тем, ни другим.
Я хотел бы расширить свой горизонт тем, какие общие шаблоны существуют здесь. Я ищу примеры, дополнительные идеи и указатели на ресурсы, которые обсуждают это с точки зрения долгосрочного, реального мира.
Кроме того, мне интересно узнать о специализированных, нишевых или простых странных подходах к проблеме.