| 

.NET C# Java Javascript Exception

1
Hi zusammen,
ich habe mal eine Frage zur Softwarearchitektur. Gehen wir von einer .Net MVC Applikation aus, in dem die Programmlogik in einem separaten Projekt liegt. Der Inhalt der Seitennavigation soll dynamisch, in Abhängigkeit der Rollen die dem eingeloggten User zugeordnet sind, aufgebaut sein. Die Seitennavigation wird innerhalb eines PartialViews definiert und auf die Layoutpage gesetzt, so dass sie praktisch überall vorhanden ist.

Die Auswertung der Bedingungen über die Userrollen ist aus meiner sicht klarer Teil der Programmlogik. Um nun das Prinzip von dependency injection sauber umzusetzen, müsste man nach meinem Verständnis jedem View ein Viewspecific-Model übergeben, welches die von der Logik erstellte Menüdefinition immer mit enthält. Mir ist klar, dass die Auswertung der User-Rollen auch auf dem View passieren könnte, allerdings bricht man dann, meiner Meinung nach, mit dem Grundprinzip von MVC.

Ich meine gesehen zu haben, dass Menüeinträge auch in abhängigkeit von Attributen an ControllerActions ([Authorize] usw.) Sichtbar\Unsichtbar gemacht werden können, allerdings Umgeht man an dieser Stelle ja irgendwie auch den logischen Teil einer Applikation.

Mein Hintergedanke ist hierbei eben, die Abhängigkeiten unter Klassen klar zu strukturieren, möglichst viel nach dem DRY-Prinzip umzusetzen und natürlich viel wiederverwendbaren Code zu generieren, so dass ich die Logik-Schicht direkt in eine Client-Serverapplikation ziehen kann. Oder ist das Übetrieben? :-)
06.05.2013
Sweatdiver 126 1 6
2 Antworten
1
Ich finds nicht übertrieben, dafür ist das Pattern ja schließlich da ;-)

Ich würde auch sagen, dass die Entscheidung ganz klar beim Controller liegt. Prinzipiell würde ich für das Menü ein Model nutzen, was die entsprechenden Felder enthält. Der Controller sollte dann durch die Rolle des Users das entsprechende Model erhalten und dies an die View weitergeben. Aus dem Model kann die View dann das entsprechende Menü generieren.

So wär jetzt zumindest mein Ansatz ;-)
30.05.2013
DerPunk 1,2k 1 7
Das heisst dann im natürlich, dass man das Menü nicht mehr auf der _Layout - Seite als PartialView sondern wiederum auf jedem View unterbringen müsste? Die LayoutPage hat ja kein Model das es empfangen kann oder?
Sweatdiver 31.05.2013
Du kannst auch der LayoutPage bwz PartialView ein Model verpassen. Du könntest das Model aber auch in die ViewData oder den ViewBag drücken.
DerPunk 03.06.2013
0
Hab da grad nochmal drüber nachgedacht. Ich glaub, du kommst nicht drum herum, ein Teil im Layout zu schreiben. In der einen Anwendung hab ich z.B.:

If User.Role = 'Administraotor' Then ...

So sind bestimmte spalten im Layout nur zu sehen, wenn der Nutzer Adminrechte hat.

Und in einer anderen hab ich das im Model direkt gemacht.
Da hab ich im Model eine Funktion, die aus der View abgerufen wird und die Entsprechenden Informationen für das Menü liefert.


Prinzipiell hat das Layout ja auch nichts mit dem Programmablauf zutun. ;-)
03.06.2013
DerPunk 1,2k 1 7
1
ich hab jetzt glaub ich eine gute Lösung gefunden. auf dem Layout hab ich nun ein @{Html.RenderAction("Index", "Menu");}
untergebracht. Auf diese Weise kann der Controller die ein Model aus der Programmlogik an einen Teil vom View zurückgeben. Auf dem PartialView geh ich jetzt eig. nur noch das Model mit ForEach durch und zeige alle generierten Links an.

Funzt super soweit
Sweatdiver 03.06.2013

Stelle deine Mvc-Frage jetzt!