Правильно ли получать данные модели в представлении или просто в контроллере? - PullRequest
3 голосов
/ 22 декабря 2010

У меня есть приложение MVC, и, как правило, контроллер передает все необходимое для представления.Но когда мои представления вложены в другие представления, то болью приходится перенаправлять эти переменные во вложенное представление.

Так оно и есть, или мне следует разрешить частичные / фрагменты, вложенные в мои представленияполучить данные из модели?

Например, у меня есть список состояний, которые я использую в нескольких вложенных частичках / фрагментах.Мне приходится проходить этот список через мои представления каждый раз, когда я хочу использовать их только для вложенных частей / фрагментов в этих представлениях.Похоже, что он подвержен ошибкам и не очень сухо.

Ответы [ 4 ]

3 голосов
/ 22 декабря 2010

Вполне допустимо, чтобы View непосредственно читал из модели.

Посмотрите статью в Википедии или картинку Мартина Фаулера: http://martinfowler.com/eaaCatalog/modelViewController.html

3 голосов
/ 22 декабря 2010

Представление не должно никогда иметь прямой доступ к модели.Фактически, весь смысл парадигмы MVC заключается в том, что каждый компонент слабо связан с другим.Таким образом, вы можете легко поменять наши модели или представления.Вы не сможете этого сделать, если поместите код модели в свой View.

Помощники или другие модули, как правило, облегчают боль в таких ситуациях.Я бы предложил посмотреть на них.Существует также концепция «Толстые модели, тощие контроллеры», добавляющие больше в вашу модель, чтобы упростить доступ к данным, разделяемым между несколькими контроллерами.Линии MVC могут стать размытыми.Тем не менее, IMO, доступ к модели непосредственно из представления нарушает основные концепции.

0 голосов
/ 24 декабря 2010

Если вы беспокоитесь о быстродействии своего приложения и хотите сделать его более простым, я бы сказал, что вы разрешаете представлениям считывать данные из модели (только для чтения).Это сложнее, когда оба контроллера и представление должны быть синхронизированы.данные, которые нужны представлениям, и контроллеры должны предоставлять представлениям.И когда представления могут напрямую обращаться к модели, вам не нужно проверять, что контроллеры предоставляют эти данные.

Что касается аргумента, что концепция MVC основана на слабой связи, то здесь нет противоречия, так как Модель все еще независима и не зависит от представлений или контроллеров.И разница между контроллерами и представлениями заключается в том, что контроллеры могут как извлекать, так и извлекать (из) модель, а представления могут извлекать только из модели.

0 голосов
/ 22 декабря 2010

Разделение основного приложения на несколько небольших MVC-«виджетов» (контроллеров), где каждый «виджет» имеет собственное отношение к Model и свой отдельный View.Затем во время выполнения приложения вы можете просто выполнить виджеты во время выполнения и перейти к основному шаблону «ГОТОВЫЕ представления виджетов».

Здесь описано нечто подобное: http://en.wikipedia.org/wiki/Presentation-abstraction-control

преимущества:

  • вы не нарушаете MVC (по крайней мере, так много) IMO, это намного лучше, чем вызов Model из вида)
  • структурируйте не только кодовую базу, обычно применяя апплодисменты / сценарии использования, описанные в виджетах stanalone(где у каждого есть свой шаблон)
  • маленькие виджеты, которые легче тестировать
...