Obszar administracyjny w Asp.Net MVC

Moje pytanie może być oczywiste, ale chciałbym zbudować dobrze zaprojektowaną aplikację internetową. Jak w przypadku każdego obszaru administracyjnego, administrator powinien być w stanie wyświetlać/tworzyć/usuwać/modyfikować użytkowników, artykuły, posty itp...

Chciałbym wiedzieć, jak najlepiej zaprojektować aplikację. Należy utworzyć kontroler dla każdego z tych elementów (/Users/Create /id lub/Posts/Delete / id) lub utworzyć całą akcję w moim kontrolerze administracyjnym (/Administration/CreateUser / id lub / Administracja / DeletePost / id) ?

Author: Yannick Blondeau, 2009-05-25

8 answers

Powinieneś napisać osobny kontroler dla każdej jednostki, aby zachować czysty rozdział obaw dla klas kontrolerów. Jeśli masz tylko jeden kontroler, to będziesz miał tylko jeden katalog widoków z dziesiątkami widoków, a twój kontroler będzie zawierał dziesiątki metod, co wkrótce stanie się niewykonalne.

 14
Author: womp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-25 06:59:41

Odpowiedź zależy od tego, ile funkcji będzie w kontrolerach. Po prostu zacznij od jednego kontrolera i jeśli będzie za dużo, podziel go na kilka. Wspaniałą rzeczą w MVC jest to, że umieszczenie rzeczy w kontrolerach nie musi mieć żadnego wpływu na adresy URL. możesz bardzo łatwo mapować / Users / Create do np. klasy UserAdminController.

 1
Author: Jonathan Parker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-25 06:58:27

Po prostu zbudowałbym nową stronę MVC, która zajmuje się administracją. Masz bardziej elastyczne rozwiązanie, o ile rozdzielisz Dane i logikę biznesową w różnych assemblach. możesz następnie opublikować swoją stronę w subdomenie, admin.yoursite.com na przykład. W ten sposób nie musisz mieszać ze swoimi trasami i możesz trzymać je w oddzielnych widokach, co imho jest najbardziej eleganckim rozwiązaniem. Zawodowcy i oszuści chętnie posłuchają.

Pracuję nad projektem, który będzie potrzebujesz tej samej strony administracyjnej, ale jeszcze nie doszedłem tak daleko, więc to pytanie bardzo mnie interesuje.

 1
Author: Peter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-25 07:32:23

Obecnie używam ASP.NET dla dużego klienta.

Moje podejście polega na przeniesieniu funkcjonalności działania do innej klasy.

Przykład

Piszę też dział administracyjny. Będzie jeden kontroler Administracyjny (nasza sekcja admin jest mała, gdyby była większa, zmieniłbym routing, aby umożliwić więcej kontrolerów, na razie używamy konfiguracji out of the box). Jeśli utworzę widok "EditUser". Stworzę również "EditUserAction" class . Cały kod EditUser trafi do klasy. Klasę EditUserAction konstruuję w klasie Administration controller w metodzie Edit User. Usuwa to cały kod specyficzny dla akcji z klasy kontrolera. W ten sposób cały kod specyficzny dla akcji jest albo w metodzie akcji, albo w klasie akcji. W przeciwnym razie kontroler szybko zostałby opanowany kodem z różnych działań. Klasa kontrolera w krótkim spokój.

Przykłady klas

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

public class EditUserAction
{
    public void Save(User user)
    {   
        //save code here
    }
}
Mam nadzieję, że to wyjaśnienie jest jasne. Jeśli to nie jest Daj mi znać i wyjaśnię.

Do odpowiedz Twoje pytanie robię to drugie (/Administracja/CreateUser/id lub /Administracja/DeletePost/id ).

 1
Author: Chuck Conway,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-25 07:32:29

Możesz użyć DynamicData do tego. Nie jest to MVC, ale może być używany razem z nim i jest naprawdę łatwy w konfiguracji i użyciu.

 0
Author: Rune Grimstad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-25 06:57:30

Oto inny sposób zadawania mojego pytania.

Część mojej strony wzorcowej:

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

Jak widać, na mojej stronie wzorcowej chciałbym wyświetlić pewną część strony, w zależności od użytkownika pracującego w obszarze administracyjnym lub nie. Działa całkiem dobrze tylko z kontrolerem administracyjnym (/Administration/CreateUser / id)... ale staje się wielkim bałaganem, gdy używam innego kontrolera jako użytkownika lub artykułu (/User/DeleteUser /id lub/Article/Details / id).

Wolałbym użyć jeden kontroler na jednostkę, ale nie mogę znaleźć sposobu, aby połączyć to podejście z wieloma kontrolerami.

 0
Author: Flesym,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-25 08:59:27

Proponuję użyć tego rozwiązania .

Ale zmieniłem definicję na taką:

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

Domyślny motyw jest domyślny, więc jest wymagany do istnienia.

Struktura katalogu będzie:

  • treść
  • tematy
    • Default
      • treść
      • odsłon
        • Dom
        • Blog
        • cokolwiek powinno być skinned
    • OtherTheme
      • treść
      • odsłon
        • Dom
        • Blog
        • cokolwiek powinno być skórowane
  • odsłon
    • Artykuły
    • posty
    • użytkownicy
    • Ustawienia
    • inne sprawy administracyjne
 0
Author: dariol,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-11 15:18:54

To zależy od wielkości skali Twojego obszaru administracyjnego, Sugeruję, abyś rozważył wykonanie następujących czynności (a może trochę je udokumentował)

  • zastanów się, ile podmiotów chcesz zarządzać niezależnie,
  • zastanów się, ile akcji będzie miało każdy z nich,
  • Sprawdź, czy istnieje jakaś zależność między Twoją aplikacją a obszarem administracyjnym (dostęp Użytkownika, dla przyjaznych dla użytkownika adresów URL)

Następnie możesz określić, które podejście może Ci pomóc, mając jeden kontroler administratora, akcje administratora w entity controllers, czyli definiowanie nowego projektu Administratora w przypadku dużych aplikacji funkcjonalnych.

*jeśli skala projektu szybko rośnie i wkrótce potrzebuje dużej skali, wybrałbym trzecią - posiadanie nowego projektu admin mvc.

Mam nadzieję, że to pomoże Ci zdecydować.

 0
Author: Homa Pourmohammadi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-08 06:41:14