Obecnie mam strukturę folderów tak:MVC Obszary Routing - Folder Kontroler z folderu
Area (folder)
- Toolkit (folder)
- Controllers (folder)
- AdminController.cs
- Views (folder)
- Admin (folder)
- Privledges (folder)
- Create.cshtml
- Edit.cshtml
- Delete.cshtml
co przekłada się
/Toolkit/{controller}/{action}/{tool}/{id}
Czy jest złą praktyką skonfigurować działanie zachowywać przypomina kontroler wyświetlający widok oparty na parametrze {tool} i parametrze {id} przekazanym do działania?
Realizacja co mówię:
private const string FOLDER_PRIVILEGES = "./Privileges/";
public ActionResult Privileges(string tool, string id = "")
{
dynamic viewModel = null;
ToolViews view; // enum for the views
// Parse the tool name to get the enum representation of the view requested
bool isParsed = Enum.TryParse(tool, out view);
if (!isParsed)
{
return HttpNotFound();
}
switch (view)
{
case ToolViews.Index:
viewModel = GetIndexViewModel(); // call a function that gets the VM
break;
case ToolViews.Edit:
viewModel = GetEditViewModelById(int.Parse(id)); // sloppy parse
break;
default:
viewModel = GetIndexViewModel();
break;
}
// The folder path is needed to reach the correct view, is this bad?
// Should I just create a more specific controller even though it would
// require making about 15-20 controllers?
return View(FOLDER_PRIVILEGES + tool, viewModel);
}
Kiedy piszę widoku, muszę się upewnić, że nazwa ścieżki jest używany do folderu
@Html.ActionLink("Edit", "./Toolkit/Admin/Priveleges/Edit", "Admin", new { id = item.id })
Wydaje się, być kiepską praktyką, ponieważ jeśli struktura folderów ulegnie w ogóle zmianie, będzie wymagała wielu czynności konserwacyjnych.
Jednakże, jeśli będę musiał przebić się na kontrolerzy, będzie ich wiele (prawie 20 z dodatkiem w czasie).
Jeśli to, co robię, to zła praktyka, jaki byłby najlepszy sposób obsłużenia trasy wyglądającej tak?
/Toolkit/Admin/Privileges/Edit/1
Chcę uniknąć w następujący sposób:
/Toolkit/Admin/CreatePrivileges/1
/Toolkit/Admin/EditPrivileges/1
/Toolkit/Admin/DeletePrivileges/1
Proszę dać mi znać, jeśli nie mam żadnego sensu, ponieważ mam problemy ze wprowadzenie tej kwestii do słowa.
Być może jestem nieporozumienie, ale przy użyciu wzorca nie zamierzasz utworzyć oddzielną funkcję, aby zwrócić odpowiedni model widoku w zależności od wyliczenia ToolViews' tak czy inaczej? Cały punkt MVC to konwencja nad konfiguracją. Ponieważ konwencja w MVC jest oddzielną akcją, aby poradzić sobie z każdą oddzielną możliwością, wydaje się, że jest to "najlepsza praktyka", aby przejść do drugiego przykładu. IE:/Toolkit/Admin/CreatePrivileges/1. –
Zdecydowałem, że jeśli chcę strawnego adresu URL, muszę podzielić go na mniejsze kontrolery. Być może trochę irytujące jest posiadanie gromady kontrolerów, ale jest to lepsze niż to, co próbowałem wcześniej zrobić. Zamiast robić/Toolkit/Admin/CreatePrivileges/1 Mam/Toolkit/Privileges/Create/1. Zdałem sobie sprawę, że część/Admin/nie ma znaczenia dla adresu URL, gdy miałem wiele mniejszych kontrolerów. –
Więc myślę, że się zgadzamy? –