Держаться ООП или тут это излишне? Я самоучка
Сделал свой костыльный движок и теперь пытаюсь его сделать более ООП'шным
Есть БД:
пользователь(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
373 +2
0
Ответы
1

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

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

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

20 Апр 2024 в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир