2009-07-28 4 views
3

Я хотел бы получить разъяснения в архитектуре MVC. Просматривая некоторые документы, я вижу, что между Model-View и Controller установлены следующие отношения. Пожалуйста, помогите мне в понимании того, как это возможно.MVC Architecture

  1. Просмотр запросов состояние модели
  2. модель проходит информация о состоянии для просмотра

ответ

1

Вообще говоря, то, что вы описали бы быть сделано контроллером. Контроллер запрашивает модель, интерпретирует данные и отправляет их в представление для отображения в форме, которую понимает вид.

Однако MVC не является жестким правилом. Существует много интерпретаций, и, когда это делается «правильно», будет более уродливым, чем немного изгибать правила, последнее обычно предпочтительнее.

2

MVC Выполняет некоторые простые правила.

  • Модель обращается к контроллеру
  • Контролер говорит с видом
  • Взгляд никогда не говорит о модели.

Ваша модель обычно будет отображаться в таблице базы данных. Например, если у вас есть «» стол · блоги, · который имеет две колонки, «название» и «тело», вы можете сделать:

Blogpost.create(:title => "Hello", :body => "World") 

Вы только что создали запись в блоге! Теперь в вашем контроллере вы будете делать что-то такое, как:

blogs = Blogpost.find(:all) 

Теперь Вы можете передать переменную 'дневников на ваш взгляд, и он может решить, как отображать эти данные пользователю. Извините, если мой примерный код не был явно прозрачным, он написан в Ruby (on Rails), который является моим текущим выбранным языком MVC.

+0

Во многих статьях, которые я читал, они говорят, что View может говорить с моделью. Это не типичная или каноническая версия шаблона. – Dinah

0

Предположим, у вас есть объект под названием View и объект под названием Model. Каждый объект имеет ссылку на другую. Способ, которым вы описали работу, будет состоять в том, что View будет вызывать функцию в модели, запрашивая статус модели и модели, чтобы вернуть желаемую информацию. Более эффективный способ его реализации заключается в том, что Модель сообщит государству, когда что-то изменилось, и View затем запросит нужную ему информацию. У меня нет кода на мне, но вы можете посмотреть на использование Observer design pattern для этого.

0

Я видел документ, описывающий «треугольную» форму MVC раньше, и я полагаю, что кто-то в какой-то момент заставил его работать (либо это, либо документы об этом просто говорят об утере). Тем не менее, я не нашел в этом практического применения, так как это приводит к серьезной проблеме программного обеспечения: «Циркулярная зависимость». Если ваше представление зависит от точной формы модели, чтобы она выполняла некоторые запросы, а модель зависит от точной формы контроллера, а контроллер зависит от точной формы представления, тогда становится практически невозможным фактически обменять из любого из этих элементов.

Я нашел очень полезным иметь модель, которая не зависит от чего-либо большего, чем простая программа командной строки. Представление, которое не зависит ни от чего, кроме инструментария gui или графического рисования api, который вы используете, так и от контроллера, который выступает в роли брокера между ними, позволяя эту развязку.Это стратегия, которая позволяет создавать модели и представления, которые являются модульными и взаимозаменяемыми, оставляя только один компонент: контроллер со всеми этими неприятными зависимостями.

Конечно, может быть какая-то «официальная» версия шаблона MVC, но я не смог пробиться сквозь какой-либо документ, чтобы описать такую ​​вещь в такт, с любым большим чувством, что это действительно применимо к системам реального мира. Но, может быть, я просто так глуп.

+0

Да, но если вы отрисуете каждую часть, точку зрения, модель и контроллер, чтобы соответствовать форме, которую вы имеете в виду, тогда вы обойдете проблему. Вы должны всегда иметь некоторый уровень абстракции. Я управлял несколькими работающими «Официальными» программами MVC, но вам не нужно строго придерживаться шаблона. Вы всегда можете изменить их в соответствии с вашими потребностями. Они больше ориентиров, чем настоящие правила. – mnuzzo

+0

Я не уверен, что вы подразумеваете под «абстрактным» в этом случае. Вы имеете в виду заранее решить, какие интерфейсы между частями будут? Я считаю, что такой подход довольно сложный, я не очень хороший программист, чтобы точно знать, будет ли проект работать раньше времени, прежде чем я его построил, и до того, как у меня появился шанс сделать т. е. в зависимости от интерфейса, который я разработал в начале, и не могу изменить звуки страшно. Может быть, вы имеете в виду что-то еще. – Breton

+0

Нет, я имею в виду абстрактный класс или интерфейс, который другие наследуемые объекты могут наследовать, чтобы создать стандартный способ взаимодействия между классами. Не переусердствуйте, тем не менее, это создаст другие проблемы. – mnuzzo