dzheka3d
@dzheka3d

MVC, как обеспечивать независимость классов друг от друга?

Всем привет! Помогите разобраться плз.
Контроллер Videos получил запрос от пользователя, что тот хочет открыть страницу с видео. Контроллер посылает запрос в модель
$modelVideo->getVideoFromID($video_id)
А модель возвращает данные (массив) об нужном видео, и вроде все хорошо, но нужно еще получить данные об авторе, который загрузил это видео и данные о лайках и дазлайках.
На ум приходит то, что в модели, при создании запроса к БД, нужно сделать LEFT JOIN и получить данные о пользователе. Но ведь в таком случае мы нарушаем правило о том, что у каждая модель работает только со своей таблицей базы данных, в общем мы делаем зависимой модель видео от таблицы users.
Другой вариант - после возвращения данных о видео в контроллер, взять ID пользователя, загрузившего видео и обратиться к модели Users
$modelUsers->getUsersFromID($author_id)
И мы получим данные об авторе. Но в таком случае мы делаем зависимым контроллер Videos от модели Users

Как справиться с этой задачей? Может у меня изначально какая-то не правильная логика?
Но дальше больше проблем... Из данных о видео мы знаем количество лайков и дизлайков, поэтому нам нужно построить кнопки и при этом проверить голосовал ли текущий пользователь за это видео. А значит снова обратиться к "стороннему" классу Likes, передав ему ID видео, количество лайков и дизлайков (ID обратившегося пользователя он возьмет из $_SESSION['uid']) ну и так мы получим кнопки, но теперь контроллер Videos зависит еще и от кнопок.

Либо, у меня еще есть мысль, но я не правильно понял, что такое переплетение кода и то, что я описал - вполне нормально?
  • Вопрос задан
  • 291 просмотр
Решения вопроса 2
Immortal_pony
@Immortal_pony Куратор тега PHP
ведь в таком случае мы нарушаем правило о том, что у каждая модель работает только со своей таблицей базы данных

Это правило только для паттерна ActiveRecord. Но я бы не назвал класс ActiveRecord моделью.
Ответ написан
Комментировать
oxyberg
@oxyberg
Продуктовый дизайнер ВКонтакте
Так как автор и его видео — это отношение один ко многим, можно реализовать получение автора по видео:
$modelVideo->getVideoFromID($video_id);
$modelVideo->author()->name;

С лайками то же самое, только у одного видео может быть много лайков.
$modelVideo->getVideoFromID($video_id);
$modelVideo->likes()->checkIfUserVoted($user_id);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы