Просто быстрый вопрос по поводу повторного использования кода.
В последнее время я пытался модулировать мой код.Я пока не очень хорошо разбираюсь в OO PHP (я работаю над тем, чтобы все обдумать), но даже если я начал использовать OOP, есть ряд сценариев, подобных приведенному ниже, где я вижу проблему с абстрагированием моего кода.
Итак, допустим, у меня есть список пользователей, которые разместили комментарий в новостной статье.Когда я получаю список комментариев, все, что у меня есть, это идентификатор пользователя.До того, как я начал пытаться абстрагировать функциональность, я бы просто сделал что-то вроде
SELECT c.*, u.username FROM comments AS c LEFT JOIN users AS u ON c.uid = u.id WHERE c.news_id = 90
. Это даст мне комментарий вместе с именем пользователя, который его опубликовал.Теперь для того, чтобы абстрагироваться от повторного получения имени пользователя (скажем, если имя пользователя было пустым, я могу захотеть вернуть concat из fname и sname), я мог бы сделать что-то вроде этого.(имея в виду, что это пример, я знаю, что в большинстве случаев имя пользователя будет обязательным полем регистрации, представьте, что я создаю базовую систему для разработки новых сайтов, где имя пользователя может быть чем-то отличным от строки в базе данных).
function getUsername($uid) {
return /** the username from the database however i decide to get it **/
}
Это должно было бы выполнить по крайней мере 1 запрос MySQL.Если у меня отображается 100 комментариев, это может быть 100 выполняемых запросов
В ООП, я думаю, я бы сделал что-то вроде
$user = new User($uid);
echo $user->getUsername();
Но для этого также потребовался бы запрос для загрузки пользователя.(и, вероятно, будет немного более ресурсоемким, поскольку пользовательский класс получит гораздо больше информации о init для создания пользовательского объекта для всех возможных методов.
Я знаю, что мог бы использовать memcache или что-то еще, чтобы ускорить процессДаже кешировать результаты, поэтому последующие вызовы getUsername () с тем же uid не требуют другого запроса. Но я не могу придумать решение, которое почти так же хорошо, как получение имени пользователя в моем обычном виде (фрагмент первого кода).
Смотрю ли я слишком глубоко на абстракцию функции и пытаюсь чрезмерно использовать ООП? Я не думаю, что так лично, я думаю, что это совершенно правильное требование, и было бы целесообразно создать экземпляр объекта пользователя, если бы я использовалООП?
Просто ищу некоторые указатели на самом деле.у всегда влияют на производительность?Или я просто ошибаюсь?