Вопрос

Каков наилучший способ справиться с "служебными" функциями в ООП-фреймворке PHP?Прямо сейчас у нас просто есть файл с несколькими функциями, которые необходимы во всей системе.(Например, a distribute() функция, которая принимает значение и массив и возвращает массив со значением, распределенным в тех же пропорциях и теми же ключами, что и входной массив.)

Я всегда чувствовал себя "грязным", используя это, потому что оно вообще не объектно-ориентировано.Лучше ли перемещать их в различные классы в качестве статических методов, или это просто семантический обходной путь?Или просто в фреймворке будет уровень, на котором некоторые вещи будут выходить за рамки структуры ООП?

Это было полезно?

Решение

Я всегда был более прагматичен в подобных вопросах.

Если вы хотите перейти на полноценный ООП, вам, очевидно, следует поместить это в классы.Однако эти классы будут только контейнерными классами, потому что на самом деле они не представляют объекты какого-либо вида.

Также:использование классов потребует от вас либо наличия экземпляра этого класса, либо использования шаблона singleton, либо объявления каждой функции статической.Первый работает медленнее (ладно, может быть, не настолько сильно, но в большом фреймворке подобные вещи тоже становятся большими - особенно в интерпретируемых языках, таких как PHP), в то время как второй и третий просто бесполезны и являются оболочкой ООП для набора функций (особенно третьего подхода).

Редактировать:Не стесняйтесь доказать, что я неправ.Я мог бы быть таким.Я не слишком опытен и всегда видел это именно так, но я могу ошибаться.

Другие советы

Я склонен делать Util() класс, который содержит только статические методы, не имеет атрибутов и не наследуется от.По сути, он действует как "пространство имен" для набора служебных функций.Я позволю этому классу увеличиваться в размерах, но иногда буду разделять методы на их собственные классы, если будет ясно, что эти методы предназначены только для работы с определенными типами данных или если будет ясно, что группа связанных методов должна быть сгруппирована в класс вместе, возможно, с некоторыми атрибутами.

Я думаю, что совершенно нормально отклоняться от чисто ООП-практик до тех пор, пока код, который отклоняется, хорошо организован и не создает архитектурных недостатков в вашей системе, которые затрудняют ее понимание и обслуживание.

Я всегда думаю о служебных функциях как о расширениях стандартных функций php.Они не являются объектно-ориентированными, потому что на самом деле вы не получаете никакой выгоды от того, что делаете их OO.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top