Держаться ООП или тут это излишне? Я самоучка
Сделал свой костыльный движок и теперь пытаюсь его сделать более ООП'шным
Есть БД:
пользователь(user_id, image_id_avatar)
картинки(image_id, image_src)
Есть класс User:private $users = [];
private $user = [];
private $userID = null;
public function __construct($userID = null, $user = [], $users = [])
{
$this->userID = $userID;
$this->user = $user;
$this->users = $users;
}
public function findBy($params = [], $multiple = false)
{
$Users = App::DB()->select('users', [], $params); //получаю данные из бд
if (count($Users)){
if ($multiple){
$this->users = $Users;
return $this;
}
if (count($Users) > 1)
return $this;
$this->user = $Users[0];
$this->userID = $Users[0]['User_ID'];
return $this;
}
return $this;
}
public function refactor($options = [])
{
$userDB = $this->user;
$image = $userDB['Image_ID_Avatar']
? STORAGE_DOMAIN .Image::getImageByID($userDB['Image_ID_Avatar'])['Image_Path']
: null;
$this->user = [
'hash' => $userDB['User_Hash'],
'nickname' => $userDB['User_Nickname'],
'avatar' => $image
];
return $this;
}Image::getImageByID возвращет src картинки:public static function getImageByID($image_id)
{
$Image = App::DB()->select('images', [], ['image_id' => $image_id]); // новый запрос в БД
return $Image[0];
}
Все это работает
Но меня смущает следующее:
Если мне нужен не один человек, а допустим 100
В таком случае, если у всех них заданы картинки, то произойдет 100 новых подключений за картинками.
Как это все можно оптимизировать и сохранить некое ООП если оно вообще у меня есть :)

21 Авг 2019 в 07:01
250 +1
0
Ответы
1

Для оптимизации процесса получения изображений для нескольких пользователей, вы можете использовать кэширование. Например, вы можете кэшировать изображения после их получения из базы данных и в последующих запросах сразу использовать кэшированные изображения, минимизируя количество запросов к базе данных.

Также, вы можете рассмотреть возможность предварительной загрузки изображений для нескольких пользователей за один запрос к базе данных, чтобы избежать повторных запросов. Например, вы можете загрузить все изображения для всех пользователей в виде массива и использовать их в дальнейших операциях.

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

20 Апр в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 493 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир