2009-04-21 4 views
11

Я только что закончил учебник Nerd Diner Скотта Гу. Я нашел это очень полезным, потому что он не только преподавал основы ASP.Net MVC, но и как использовать с репозиториями, валидацией, модульным тестированием, Ajax и т. Д. Очень важно, но все же управляем.ASP.Net MVC View Structure

Однако мне любопытно о его структуре сайта:

В частности, он использовал этот вид strucuture для каждого объекта:
/ModelObject/Редактировать/
/ModelObject/Создать/

Затем извлекается общие элементы между двумя видами и помещают их в частичную.

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

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

Спасибо!

[Редактировать разъяснения]

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

В этом случае является нарушением правила «Тупой взгляд», используя тот же вид, чтобы обрабатывать оба случая, которые могут вызвать серьезные проблемы?

ответ

6

Структура представления основана на контроллерах, а не на модели напрямую. В методологии Mvc у вас должно быть представление для каждого действия (каждый открытый метод, по существу) в контроллере. Действия контроллера не должны совпадать непосредственно с каждой таблицей в базе данных, но, вероятно, существует какая-то прямая связь между количеством таблиц в базе данных и количеством контроллеров и представлений. Контроллеры более высокий уровень

Общепринято иметь действия типа CRUD на контроллере, когда они применимы:

  • индекс: список элементов
  • Детали: просмотреть конкретный пункт
  • Edit: редактировать элемент
  • Создать: новый товар
  • удалить: удалить элемент

Для каждого из этих действий потребуется представление (а иногда и несколько).

Итак, да, вы можете собирать большое количество представлений, если это большое приложение. Способ минимизировать коды:

  • Extract общие функциональные возможности частичных представлений, чтобы держать точку зрения действий, как маленький и простой, насколько это возможно
  • Держите мнения и контроллеры просто так, что они просты в обслуживании
  • Использование AJAX для реализации больше функциональных возможностей в одном представлении

важно отметить, что любое крупное приложение будет иметь много форм. Будь то Mvc или Web Forms, если есть много данных для работы, там будет много форм, необходимых для этого.

+1

Почему вы хотите удалить исключение? Для удаления редко требуется его собственное представление, оно обычно обрабатывается как действие, инициированное в индексе, детали или редактировании. – Aaron

+2

Вы правы, обычно это делается так, но я видел это в обоих направлениях. Иногда есть представление для подтверждения (а не всплывающее окно javascript) или как отказ от использования javascript. –

+0

@StevenLyons у вас есть ссылка на хорошо структурированную настройку нескольких просмотров, которые правильно используют частичные представления?Я пытаюсь найти хорошие примеры, чтобы понять, как структурировать представления в приложении, над которым я работаю. – ganders

1

если у вас есть фон в качестве разработчика веб-форм asp.net, ваш ответ естественный. Существует несколько вопросов, это зависит от точки зрения. Во-первых, с asp.net-mvc у нас нет полностью оборудованных серверных элементов управления, которые делают для нас многое, без реального осознания того, что они делают. Теперь вам нужно набрать больше кода и посмотреть, как хирург на html. Этот способ я могу найти разумный вопрос для «Взгляд Взрыва» Другие проекты следуют более или менее этой структуре, см. Проект Роба Конье: Mvc Storefront

PS: "Худые контроллеры, Fat Модель и ... Тупой вид"

[ответ Update осветлению]

Mhh .. Я думаю, что нет никакого нарушения "немой зрения". Важно то, что все взгляды не имеют ничего общего с кодом на уровне бизнес-логики или вашей модели. Вы можете нажать кнопку «Сохранить», контроллер должен знать, какое действие должно выполняться, вставлять или обновлять.

2

Это правда, что это действительно может поддаваться многим взглядам. Тем не менее, я обнаружил, что в реальных приложениях для жизни у меня будет несколько таблиц, в которых у меня нет корреляции 1: 1 с операциями CRUD. Хотя у меня есть данные, которые входят в эти таблицы, я обнаружил, что в большинстве случаев представление представляет данные из по меньшей мере двух, если не трех или более таблиц. Как и все другие приложения, вы должны знать, что вам нужно, чтобы вы могли планировать все. Для любого приложения большого размера потребуется довольно много планирования спереди (что будет включать анализ количества просмотров/контроллеров для MVC).

Это только небольшие приложения, которые вы можете объединить на основе ваших догадок и прошлого опыта.

1

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

    - Те же свойства отображаются
    - Same валидаций

BUT, это приведет к тому, что вы либо

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

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