Какова стоимость, связанная с вызовами html.action в вызовах html.partial в MVC3? - PullRequest
0 голосов
/ 15 сентября 2011

Итак, я создаю веб-страницу с использованием MVC3, которая должна быть легко настраиваемой. Например, возьмите страницу IMDB телешоу. Он состоит из нескольких компонентов (далее называемых виджетами): информация заголовка, список актеров, список эпизодов, случайные пустяки, список цитат, предварительный просмотр форума и т. Д.

Допустим, я создавал клон IMDB, и в зависимости от типа страницы (фильм, телешоу, актер) вы показываете разные виджеты. Кроме того, пользователь может изменить настройки, чтобы добавить или удалить определенные виджеты с каждого типа страниц.

В моем проекте это так, что контроллер для основного представления передает коллекцию "моделей представления виджетов", которая содержит информацию, необходимую для получения информации, необходимой для каждого отдельного виджета. Таким образом, он предоставит идентификатор (для получения информации из базы данных), контроллер и действие.

Внутри основного представления он просматривает этот список моделей представлений виджетов и вызывает html.partial для частичного представления универсального контейнера виджетов, который содержит общий HTML и JavaScript / jQuery для каждого виджета и передает отдельную модель представления виджета в это частичное представление.

Внутри этого частичного представления, в div содержимого контейнера общего виджета, он вызывает другую html.action, чтобы получить конкретное частичное представление виджета, вызывая конкретное действие контроллера, которое получает информацию по полю id поля модель представления виджета.

Примечания к скале: Список объектов метаданных -> основной вид. Каждый объект метаданных -> общий частичный вид. Частичное представление -> другое частичное представление для получения данных с использованием метаданных.

Итак, теперь, когда вы прочитали все это, у меня есть два вопроса:

  1. Какова стоимость, связанная с наличием нескольких вызовов html.partial в главном представлении, причем каждое частичное представление вызывает html.action?

  2. Это хороший, логичный дизайн?

1 Ответ

3 голосов
/ 15 сентября 2011

Интересный вопрос - я провел пару экспериментов, потому что сам хотел узнать ответ.

1) Стоимость - создание объекта контроллера.Каждый раз, когда вы вызываете Html.Action (), создается новый экземпляр объекта контроллера.Это верно, даже если вы вызываете несколько действий на одном контроллере в ходе одного и того же представления (я пробовал это).Это хорошее поведение, поскольку оно гарантирует, что каждое действие имеет чистый лист.

@Html.Partial вообще не должен быть обременительным - компилятор должен оптимизировать вещи.

Недостатком является то, что если ваши контроллеры выполняют тяжелую работу с внешними службами (например, с базой данных)Вы могли бы в конечном итоге открыть сразу несколько соединений, одновременно обслуживая один запрос (по крайней мере, одно для вашей родительской страницы и одно для представления, поскольку контроллер не удаляется до тех пор, пока представление не отобразится - для вашего подчиненного элемента.просмотров это должно быть в конце Html.Action).Так что вам нужно знать об этом - если ваши действия создают дорогие ресурсы, это может сложиться.

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

Решение, которое вам нужно принять, - это оптимизация производительности по сравнению с оптимизацией разработки, и это зависит от веса ваших действий контроллера.

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