Вопросы по архитектуре MVC - PullRequest
4 голосов
/ 06 июня 2010

Я начал кодировать довольно сложное веб-приложение, и оно стало довольно беспорядочным. Поэтому я решил, что постараюсь организовать это лучше. MVC показался уместным. Я никогда не использовал MVC раньше, и, исследуя его, я пытаюсь закрепить лучшее восприятие этого (и мои вопросы, очевидно, отражают то, что, я думаю, я выучил до сих пор). Мои вопросы слегка ориентированы на JavaScript:

  1. Какой объект должен делать запросы "AJAX"? Контроллер или Модель? (разделение - должна ли Модель просто хранить / манипулировать данными, ей не важно / не знать, откуда поступили данные, или это должна быть та, которая их извлекает?)

  2. Должна ли модель вызывать функции View, предоставляя им данные в качестве аргументов, или View должен запрашивать (ссылаться) модель внутри себя? (помните о принципах разделения: «Представлению не должно быть важно знать / откуда оно получает данные» - это правильно?)

  3. В общем, должен ли Вид «знать» о существовании Модели и наоборот? Контроллер - единственное, что склеивает их, или это просто неправильно? (Я действительно сомневаюсь, что это утверждение в целом верно)

Есть большая вероятность, что я захочу перенести это в настольное / мобильное приложение, поэтому я бы хотел разделить компоненты таким образом, чтобы я мог выполнить эту задачу, заменив текущий источник данных, HTTP-запросы , с доступом к БД и заменой View.

Может быть, каждый подход, о котором я спрашивал, все еще "действителен" MVC, и мне остается только выбрать. Я понимаю, что ничего не установлено в камне, я просто пытаюсь иметь (лучшую) общую идею в моей голове.

Ответы [ 3 ]

2 голосов
/ 06 июня 2010
  1. Предполагая, что вы имеете в виду настоящий Ajax (то есть асинхронный вызов Javascript), я бы сказал, что это действительно ответственность представления. Javascript на стороне клиента, а ваш контроллер и модель на стороне сервера.
  2. Модель и представление не должны взаимодействовать вообще. Контроллер является информационным шлюзом и связующим звеном, управляющим потоком приложений.
  3. Как упоминалось выше, представление не должно взаимодействовать с моделью. Как вы заявляете, контролер - средний человек. В большинстве структур есть способы замкнуть этот канал, но их следует избегать.
1 голос
/ 06 июня 2010

1 - View делает запрос AJAX, и он обработан контроллером.Контроллер знает, какие данные запрашивать и когда, и как их упаковать для представления, но не знает ничего о базовом механизме хранения (например, SQL, XML, NoSQL ...);это абстрагируется моделью.
2 - Нет обоим.Вид и Модель не должны знать друг друга.
3 - Нет первому, да второму.

0 голосов
/ 06 июня 2010

Я сам пошел по этому пути:

  1. Вся обработка данных в модели, в т.ч. AJAX-запросы и обработчики
  2. Контроллер обрабатывает слушателей, которые подключены как к модели, так и к представлению
  3. Мне нравится эта концепция прослушивания и подключения контроллера. Я думаю, что это делает вещи намного проще

Изучите Model-View-Controller в jQuery учебник для этого подхода. Это сделало мою жизнь намного проще и значительно улучшило код. Легко рефакторинг и повторное использование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...