Подтвердить что ты не робот

Область администрирования в Asp.Net MVC

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

В настоящее время я использую 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
    }
}

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

Чтобы ответить ваш вопрос, я делаю это последнее (/Administration/CreateUser/id или/Administration/DeletePost/id).

Ответ 5

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

Ответ 6

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

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

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

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

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

Ответ 7

Я предлагаю использовать это решение.

Но я изменил определение на следующее:

    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"
        };
    }

По умолчанию тема по умолчанию, поэтому она должна существовать.

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

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

Ответ 8

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

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

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

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

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