ASP.NET MVC Контроллер дизайн - PullRequest
       4

ASP.NET MVC Контроллер дизайн

2 голосов
/ 04 августа 2011

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

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

  1. Панель администратора будет содержать ссылки на site/controller/edit, но компоновка результатов этих действий будет отличаться от стандартной.

  2. Контроллер администратора будет иметь все эти действия, такие как BlogAdd, BlogEdit, так что URL будет выглядеть примерно так: /site/admin/blogedit.

  3. Создайте копии контроллера блога в папке администратора, чтобы URL был похож на /site/admin/blog/edit - я чувствую проблемы с маршрутизацией, поскольку 2 контроллера с одинаковым именем не кажутся хорошей идеей, однако мне нравится, как URL выглядит в этом ситуация.

Я пытаюсь создать CMS, похожую на WordPress, где создание, редактирование и удаление блога полностью отделены от самого блога по умолчанию.

Ответы [ 3 ]

4 голосов
/ 04 августа 2011

Я предлагаю вам перестать думать, что URL-адреса и контроллеры являются отношениями 1-> 1.Это сделает вещи НАМНОГО проще и менее запутанными.Вы можете заставить URL работать так, как хотите, с помощью механизма маршрутизации MVC, и нет никаких причин ограничивать дизайн / организацию контроллера из-за желаемых URL, потому что вы всегда можете адаптировать маршрутизацию с учетом URL, которые вы имеете в виду.

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

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

Что касается вашего первого требования:

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

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

3 голосов
/ 04 августа 2011

Вы можете создать Области в своем проекте MVC и использовать функции администратора в контроллере в своей области администратора.

Это позволит вам легко отделить функции администрирования от общих функций блога.

Вот как бы я это сделал.

0 голосов
/ 04 августа 2011

Почему вы не сохраняете маршруты одинаковыми и не выполняете разные роли через безопасность? Например:

  • / blog / name-of-topic / view для просмотра темы (все пользователи)
  • / blog / name-of-topic / edit для редактирования темы (доступно только для зарегистрированных пользователей)
  • / blog / add для создания новых тем (доступно только для зарегистрированных пользователей)

Вы можете обрабатывать эти действия в одном контроллере и декорировать действия, которые требуют зарегистрированных пользователей, через атрибут [Authorize]. То же самое со ссылками на ваши представления, вы позволите ссылкам редактировать и добавлять темы только видимым пользователям.

У вас все еще может быть отдельная панель, позволяющая администраторам нажимать на вышеупомянутые ссылки добавления / редактирования.

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