Хорошо, позвольте мне ответить на них один за другим ...
1. Стоит ли делать что-то подобное
Да и нет. Разделение вспомогательных функций на их собственные классы - хорошая идея. Он сохраняет «область видимости» каждого из классов жестко определенными, и вы не получите ничего. Однако не делайте метод статичным только потому, что вы можете. Метод запроса призван облегчить вашу жизнь, управляя соединением, так почему вы хотите потерять это преимущество?
2. Их сложнее проверить
Их не сложнее проверить. Статические методы, которые зависят от состояния, сложнее протестировать (которые получают доступ к статическим переменным-членам или глобальным переменным). Но статические методы в целом так же легко тестировать, как и методы экземпляра (на самом деле, они могут быть проще, поскольку вам не нужно беспокоиться об экземплярах).
3. Продление классов
Это действительная проблема. Если вы введете String_Helper::foo()
в самом классе, у вас возникнут проблемы. Но можно было бы установить имя помощника в качестве переменной класса. Таким образом, вы можете сделать {$this->stringHelper}::foo()
(обратите внимание, только PHP 5.3). Таким образом, чтобы переопределить класс, все, что вам нужно сделать, это изменить вспомогательный класс строки в этом экземпляре. Фреймворк Lithium
делает это много ...
4. Глобальный реестр
Я бы держался подальше от этого. Вы просто делаете каждый класс одиночным, не применяя его. Тестирование станет кошмаром, поскольку теперь вы зависите от глобальной области видимости. Вместо этого я бы создал объект реестра и передавал его классам через конструктор (Dependency Injection). Вы все еще выполняете то же самое, поскольку у вас есть хранилище для объектов / классов, но вы больше не зависите от глобальной области видимости. Это значительно облегчает тестирование.
В общем
Когда вы смотрите на подобные вещи, мне нравится останавливаться, когда я задаю подобные вопросы. Остановитесь, сядьте и подумайте * Какую реальную проблему я пытаюсь решить? " в долгосрочной перспективе действительно поддерживаемы (как с точки зрения исправления ошибок, так и с точки зрения добавления функций). Только если вы довольны обоими этими ответами, вам стоит даже подумать об этом. Программирование - это не создание самого сложного, самого умного или удивительного решения, а создание самого простого решения, которое решает проблему ...
Надеюсь, это поможет ...
Удачи!