2009-05-25 2 views
27

Мой вопрос может быть очевиден, но я хотел бы создать хорошо разработанное веб-приложение. Что касается любой области администрирования, администратор должен иметь возможность перечислять/создавать/удалять/изменять пользователей, статьи, сообщения и т. Д.Область администрирования в Asp.Net MVC

Я хотел бы знать, как лучше всего разработать приложение. Должен ли я создать контроллер для каждого из этих элементов (/ Users/Create/id или/Posts/Delete/id) или создать все действие в моем контролере администрирования (/ Administration/CreateUser/id или/Administration/DeletePost /Я бы) ?

+3

Хороший вопрос, у меня были подобные проблемы, когда я начал с MVC. –

ответ

14

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

0

Для этого можно использовать DynamicData. Это не MVC, но его можно использовать вместе с ним, и его очень легко настроить и использовать.

+0

Это может быть хорошей идеей, но у меня нет времени, чтобы узнать, как использовать DynamicData и заставить ее работать с MVC. – Flesym

+0

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

1

Ответ зависит от того, сколько функций будет в контроллерах. Просто начните с одного контроллера, и если он станет слишком много, разделите его на несколько. Великая вещь о MVC - это то, где вы вкладываете вещи в свои контроллеры, не должно влиять на URL-адреса. вы можете легко отобразить/Пользователи/Создать, например. Класс UserAdminController.

1

Я бы просто создал новый веб-сайт MVC, который обрабатывает администрацию. У вас есть более гибкое решение, если вы разделили данные и бизнес-логику в разных сборках. Затем вы можете опубликовать свой сайт в субдомене, например admin.yoursite.com. Таким образом, вам не нужно возиться с вашими маршрутами, и вы можете сохранить их в отдельных представлениях, которые imho является самым элегантным решением. Pro's и Con's было бы приятно услышать.

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

1

В настоящее время я использую ASP.NET для большого клиента.

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

Пример

Я пишу раздел администрирования также. Там будет один контроллер администрирования (наша секция администратора небольшая, если бы она была больше, я бы изменил маршрутизацию, чтобы позволить больше контроллеров, пока мы используем конфигурацию из коробки). Если я создаю представление «EditUser». Я также создам «EditUserAction» класс. Весь код EditUser войдет в класс. Я создаю класс EditUserAction в классе контроллера администрирования в методе Edit User. Это исключает весь код действия из класса Controller. Таким образом, весь конкретный код действия находится либо в методе действия, либо в классе действий. В противном случае контроллер быстро переполнится кодом из различных действий. Класс контроллера был бы вкратце неуправляемым беспорядком в короткие сроки.

примеры Класс

public class Administration: Controller 
{ 
    public ActionResult EditUser(string userId) 
    { 
     EditUserAction action = new EditUserAction(); 
    } 
} 

public class EditUserAction 
{ 
    public void Save(User user) 
    { 
     //save code here 
    } 
} 

Я надеюсь, что это объяснение понятно. Если это не даст мне знать, и я уточню.

Чтобы ответ ваш вопрос я делаю это последний (/Администрирование/CreateUser/идентификатор или /Администрирование/DeletePost/идентификатор).

+0

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

0

Вот еще один способ задать мой вопрос.

Часть моей главной страницы:

<% if (!String.Equals(ViewContext.RequestContext.RouteData.GetRequiredString("controller"), "Administration")) { %> 
<div> 
    <!-- Some Code --> 
</div> <% } %> 

Как вы можете видеть, в моей главной странице, я хотел бы показать некоторую часть страницы, в зависимости от пользователя, работающего на администрации области или не. Он работает очень хорошо только с административным контроллером (/ Administration/CreateUser/id) ... но он становится большим беспорядком, когда я использую другой контроллер в качестве пользователя или статьи (/ User/DeleteUser/id или/Article/Details/id).

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

+0

Если вы хотите интегрировать администрирование на свой сайт, как это, я думаю, что было бы лучше пойти по пользовательскому подходу. Просто реализуйте все на главном веб-сайте, но показывайте действия edit/delete/create только для людей с правильными разрешениями. Это не должно зависеть от маршрута, который соблюдается? – Peter

0

Предлагаю использовать this solution.

Но я изменил определение этому:

public ThemedViewEngine() 
    { 
     base.MasterLocationFormats = new string[] { 
      "~/Views/{1}/{0}.master", 
      "~/Views/Shared/{0}.master", 
      "~/Themes/{2}/Views/{1}/{0}.master", 
      "~/Themes/{2}/Views/Shared/{0}.master", 
      "~/Themes/Default/Views/{1}/{0}.master", 
      "~/Themes/Default/Views/Shared/{0}.master" 
     }; 
     base.ViewLocationFormats = new string[] { 
      "~/Views/{1}/{0}.aspx", 
      "~/Views/{1}/{0}.ascx", 
      "~/Views/Shared/{0}.aspx", 
      "~/Views/Shared/{0}.ascx", 
      "~/Themes/{2}/Views/{1}/{0}.aspx", 
      "~/Themes/{2}/Views/{1}/{0}.ascx", 
      "~/Themes/{2}/Views/Shared/{0}.aspx", 
      "~/Themes/{2}/Views/Shared/{0}.ascx", 
      "~/Themes/Default/Views/{1}/{0}.aspx", 
      "~/Themes/Default/Views/{1}/{0}.ascx", 
      "~/Themes/Default/Views/Shared/{0}.aspx", 
      "~/Themes/Default/Views/Shared/{0}.ascx" 
     }; 
     base.PartialViewLocationFormats = new string[] { 
      "~/Views/{1}/{0}.aspx", 
      "~/Views/{1}/{0}.ascx", 
      "~/Views/Shared/{0}.aspx", 
      "~/Views/Shared/{0}.ascx", 
      "~/Themes/{2}/Views/{1}/{0}.aspx", 
      "~/Themes/{2}/Views/{1}/{0}.ascx", 
      "~/Themes/{2}/Views/Shared/{0}.aspx", 
      "~/Themes/{2}/Views/Shared/{0}.ascx", 
      "~/Themes/Default/Views/{1}/{0}.aspx", 
      "~/Themes/Default/Views/{1}/{0}.ascx", 
      "~/Themes/Default/Views/Shared/{0}.aspx", 
      "~/Themes/Default/Views/Shared/{0}.ascx" 
     }; 
    } 

По умолчанию тема по умолчанию, так что требуется существует.

Структура каталога будет:

  • Содержание
  • Темы
    • По умолчанию
      • Content
      • Просмотров
        • Главная
        • Блог
        • Безотносительно должны быть кожурой
    • OtherTheme
      • Содержимое
      • Просмотров
        • Главная
        • Блог
        • Безотносительно должна быть кожа
  • Просмотров
    • Статьи
    • сообщений
    • Пользователи
    • Настройки
    • Прочее Администрация
0

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

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

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

* Если масштаб проекта быстро растет, и вскоре он нуждается в больших масштабах, я бы выбрал третий, имея новый проект mvc администратора.

Надеюсь, это поможет вам решить.

Смежные вопросы