#mvc #архитектура
Доброго времени суток. Пожалуйста, объясните новичку, что такое MVC? Знаю что это Модель-Представление-Контроллер, и что один влияет на другой, при этом Контроллер выступает посредником между Моделью и Представлением. НО! Мне трудно представить, что являет собой Модель? Перечитал много материала, но хоть убейте, не понимаю что такое Модель( Буду признателен за очень простой пример.
Ответы
Ответ 1
MVC — это не только про сетевые сервисы, но вообще про всё, где есть структурированные наборы данных и необходимость их отобразить. Если говорить обобщённо, модель — это всего лишь некий объект за универсальным интерфейсом, который умеет оперировать неким набором данных. К этому объекту мы можем подключать контроллеры (а в некоторых реализациях и виды, напрямую), не задумываясь об источнике данных и тонкостях взаимодействия с ним. Возьмём для примера фреймворк Qt, используемый при разработке приложений. Он предоставляет следующее: Интерфейс модели, позволяющий оперировать древовидной иерархией таблиц. Это самое обобщённое представление; на деле же модели реализуют списки (таблицы в один столбец без дочерних элементов), таблицы (таблицы MxN без дочерних элементов), деревья (таблицы в один столбец с дочерними элементами), ну или собственно иерархию таблиц (дерево с дополнительными атрибутами у каждого элемента). Курсор, позволяющий независимо гулять по одной и той же модели из нескольких мест одновременно. Причём курсор «знает», какой модели он принадлежит. Набор готовых видов (списком, таблицей, деревом, графиком и т. д.), которому необходимо передать курсор на отображаемый корневой элемент. Дальше вид клонирует этот курсор и, пробегая им по модели, сам решает, какие элементы и как он будет отображать. Возможность отобразить любые данные в любом стандартном виде, если источник данных обернут в интерфейс модели. Возможность написать свой вид для отображения выборки из любого потенциального источника данных, обёрнутого в интерфейс модели. К примеру, это может быть набор полей для отображения какой-то одной записи с кнопками «назад» и «вперёд»; здесь вид пробегает курсором только по указанным полям (столбцам) корневого элемента (записи).Ответ 2
Мне в свое время пытались объяснить, я ничего не понимал, но чтобы было проще вот пример: У тебя есть модель, в ней есть функции всякие, к примеру одна извлекает данные из бд, другая записывает и тд. Далее у тебя есть представление, это тупо html шаблон, в котором описывается как выглядит страница. Контроллер же ты используешь для передачи данных в этот самый шаблон. К примеру у тебя контроллер обращается к модели, получает данные оттуда, и передает в представление. Мне в свое время помогло разобраться в этой фигне обучение на laravel, у них есть просто сверхподробный курс, как что и зачем. https://laracasts.com/series/laravel-from-scratch-2017 Заходишь, смотришь, и постепенно поймешь =)Ответ 3
Это данные и логика, которая обрабатывает эти данные. Другими словами, весь бэкэнд. Модель — как приложение/сайт работает, вид — просто вывод результата. Контроллер просто спрашивает у модели что хочет пользователь и выводит это в вид.Ответ 4
Модель - это все остальное приложение за вычетом View и Controller. По сути, MVC разделяет приложение на три части View - отвечает за отображение данных Controller - отвечает за логику представления (валидацию, навигацию и прочее) Model - отвечает за все остальное (обычно это бизнес-логика + хранение данных + общение с внешними сервисами) MVC - это паттерн уровня представления, так что никаких жестких условий на устройство модели он не накладывает. Т.е. модель - это что угодно, кроме View / Controller. Конкретные подвиды паттерна (MVVM/MVP/MVC разных сортов) и их реализации в разных фреймворках могут накладывать какие-то требования (например, QT из соседнего ответа хочет модель виде "древовидной иерархии таблиц" и использует курсоры для работы сними) - но это особенности конкретной реализации в конкретном фреймворке. В реализациях MVC под web (C# / PHP) не будет никакой иерархии таблиц и никаких курсоров, и никакого жесткого интерфейса для модели. Будут обычные классы для передачи данных и некий код для их обработки (BL) / сохранения (DAL).
Комментариев нет:
Отправить комментарий