Представление - это просто интерфейс, который никогда напрямую не связывается с моделью. Он всегда взаимодействует с Controler.
Вид - это внешний интерфейс, да. Он не должен изменять модель, но он должен знать о модели, поскольку он должен получать от нее информацию. Он получает Модель от Контроллера и «взаимодействует» с Контроллером посредством ссылок / форм, которые он может содержать.
Контроллер - это программный компонент, который получает и отвечает на просмотр и связь с моделью.
Контроллер не «получает» представление, но он получает запросы, которые могут исходить от представления (не обязательно одного из его собственных представлений). Таким образом, он отвечает на запросы, а не на просмотры как таковые. Он извлекает модель и должен обрабатывать вызывающие методы модели для изменения модели на основе запроса («сообщить модели»). Затем он передает модель для просмотра.
Модель будет иметь всю логику программирования, проверки, связь с базой данных, услуги и т. Д.
Логика и услуги часто могут отсутствовать в Модели. Службы должны быть отдельными (они вообще не относятся к M.V.C.), а контроллеры, как правило, содержат логику вашего приложения. Проверка может быть определена в вашей модели (некоторым пуристам это не нравится), но отображение проверки выполняется в представлении. Связь с базой данных может быть в вашей модели, или у вас могут быть службы, которые делают это.
где будет класс POCO в модели?
Классы POCO будут в вашей модели, да. То же самое относится и к классам ViewModel (которые сами по себе часто являются классами POCO). Модель может иметь много классов, которые представляют ваши данные для разных обстоятельств, включая несколько способов представления одних и тех же данных из-за разных мест их использования.
Например: у вас может быть «модель смены пароля», которая представляет некоторые свойства объекта «Пользователь» и будет полностью отличаться, скажем, от модели «отображения профиля пользователя».
Ваши объекты Model, которые непосредственно представляют элементы базы данных, могут находиться в их собственной библиотеке, но ваши объекты ViewModel, скорее всего, будут находиться в отдельной библиотеке. Ваша модель не должна знать о вашем контроллере или представлении. Хотя вы будете создавать объекты ViewModel с учетом вашего представления (только с учетом свойств, которые вам нужны в View), сам ViewModel даже не должен иметь никакого кода, связывающего его с вашими представлениями.