Вот как бы я это сделал. Он должен быть действителен практически на любом языке.
Представление инициирует вызов метода для метода OnView () контроллера, а затем отображает все то, что контроллер ему плюет (контролируемым образом, конечно ... Я думаю, что ваше представление будет содержать видео компонент проигрывателя, так что вы получите какое-то видео с контроллера)
В вашем контроллере есть метод OnView (), который выполняет 3 вещи: создание экземпляра объекта Video (т.е. использует слой данных для получения объекта модели), вызов метода updateViewCount () для объекта Video и отображение видео (по-видимому, возвращая объект Video в View).
Объект Video model содержит данные, представляющие ваше видео, и все необходимые материалы для домашнего хозяйства, включая updateViewCount (). Основанием для этого является то, что видео имеет количество просмотров (агрегация). Если «количество просмотров» должно быть сложным объектом, а не просто целым числом, пусть будет так. Слой данных, который создает объекты Video из их примитивного представления на диске (база данных?), Также будет отвечать за загрузку и создание соответствующего объекта подсчета просмотров как часть создания видео.
Итак, это мои 0,02 доллара. Вы можете видеть, что я создал четвертую вещь (первые три - это Model, View и Controller) - слой данных. Мне не нравится, когда объекты Model загружаются и сохраняются сами, потому что тогда они должны знать о вашей базе данных. Мне не нравится, когда контроллеры выполняют загрузку и сохранение напрямую, потому что это приведет к дублированию кода между контроллерами. Таким образом, отдельный уровень данных, к которому должны иметь доступ только контроллеры.
В качестве заключительного замечания, вот как я смотрю на представления: все, что делает пользователь, и все, что видит пользователь, должно проходить через представление. Если на экране есть кнопка с надписью «play», она не должна напрямую вызывать метод контроллера (во многих языках это не опасно, но некоторые, например PHP, потенциально могут это разрешить). Теперь метод представления "play" просто развернется и вызовет соответствующий метод на контроллере (который в этом примере - OnView) и ничего не сделает, но этот уровень концептуально важен, даже если он не имеет функционального значения. Аналогично, в большинстве ситуаций я ожидаю, что ваше представление будет воспроизводить видеопоток, поэтому данные, возвращаемые контроллером представлению, будут потоком в том формате, который требуется представлению, который может не обязательно быть вашим точным объектом Model (и добавлением этот дополнительный слой развязки может быть целесообразным, даже если вы можете использовать объект Video напрямую). Это означает, что я мог бы на самом деле заставить мой метод OnView принимать параметр, указывающий, какой формат видео я хочу вернуть, или, возможно, создать отдельные методы просмотра на контроллере для каждого формата и т. Д.
Достаточно долго наматывается для тебя? : D Я ожидаю немного пламени от разработчиков Ruby, у которых, похоже, немного другое (хотя и не несовместимое) представление о MVC.