@Alk90
php, mysql, jquery, css, html, api

Правильно ли использование статичных методов в таком контексте?

Всем привет!
У меня есть класс Users, который работает с БД только стаблицей users и связанными с ней, например friends. Класс имеет методы:
  • get() - получить всех пользователей
  • getById($id) - получить пользователя по ID
  • getByIds($ids) - получить несколько пользователей по их ID
  • search($q) - поиск пользователя по тексту

Ну и вспомогательные методы вроде limits(), sorts() и т.д.

Но в неком модуле, например модуль комментариев. Мне нужно обновить рейтинг пользователя.
Правильным ли будет создать статичный метод Users::UpdateRating($rating, $user_id);, с помощью которого я буду в любом нужном мне модуле вызывать его для изменения рейтинга пользователя?
  • Вопрос задан
  • 76 просмотров
Решения вопроса 1
Stasgar
@Stasgar
Обученная макака
Нет, конечно. Здесь не уместен статический метод. Вам же в любом случае придется найти пользователя, а уже затем обновить ему рейтинг.

Я не знаю как ваш Users устроен, но в общем и упрощенном случае следует сделать так:
class Users extends Model {
    ...
    protected $id;
    protected $name;
    protected $password;
    ...
    public function getById($id)
    {
        // Т.е. мы возвращаем эту же модель Users, но уже с данными конкретной записи из БД
        return $this->where('id', $id); 
    }

    public function rating()
    {
        // Возвращает модель рейтинга данного пользователя
        // Саму модель рейтинга здесь хардкожу, но в реальности лучше что-то более гибкое придумать
        return RatingModel::where('user_id', $this->id); 
    }

    public function updateRating($rating)
    {
        // обновляем рейтинг данного пользователя
        $this->rating()->update(['rating'=>$rating]);
    }


    ...
}


Таким образом получается гибкая и понятная система. В самом коде используется так:
$user = (new Users)->getById(1);
$user->updateRating(200);


Статику следует использовать тогда, когда это оправданно и необходимо, и когда без неё нельзя.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
index0h
@index0h
PHP, Golang. https://github.com/index0h
Не используйте статику. Вот в вашем примере где будет браться подключение к бд? Вероятно в тоже из чего-то статического. Ваш код будет сильно связан, тяжело тестируем и на лонг ране будет увеличиваться сложность поддержки.
Попросили проверить код, на что смотреть нужно?
Ответ написан
Комментировать
@kenny_gomel
Я бы порекомендовал тогда ожидать на входе Users::UpdateRating одно значение рейтинга и массив Id юзеров
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽