2008-08-30 16 views
9

Also beginne ich mit einem ASP.NET MVC-Projekt und während die Erfahrung insgesamt gut war, bin ich nicht ganz so zufrieden mit dem Spaghetti-Chaos, das meine Controller haben. Ich habe mich online umgesehen (CodeCampServer, etc ...) und sie alle scheinen das gleiche Problem zu haben, bei dem Controller-Methoden SRP (Single-Responsibility-Prinzip) ziemlich konsistent verletzen - wie zum Beispiel eine Controller-Methode, die einfach die Ansicht rendert, wenn die Anfrage ist ein GET, aber aktualisiert das Modell, wenn es ein POST ist. Jetzt habe ich Controller-Methoden, die für mehrere logische Routen in der gesamten Anwendung zuständig sind - sagen, es prüft, auf welche Schaltfläche im Formular geklickt wurde, und handeln entsprechend. Ich könnte jeden Klick auf eine andere Form mit JavaScript umlenken, aber etwas fühlt sich auch nicht richtig an ... Das andere große Problem ist die Verbreitung von magischen Zeichenfolgen - ViewData ["foo"] = blah; Lange Rede, kurzer Sinn, wie strukturiert ihr eure Steuerungslogik? Ein riesiges Modellobjekt pro Ansicht? Viele kleine Controller-Methoden und JavaScript ist der Router? Mein Ziel ist es wartbaren Code - als Merkmale angehäuft erhalten auf Ich fange an, dass rutschiger Abhang hinunter zu rutschen ...ASP.NET MVC: Strukturierende Controller

Antwort

8

ASP.NET Preview 5 (auf CodePlex) haben eine Antwort dafür: das [AcceptVerbs] Attribut. Phil Haack hat eine blog post Diskussion, wie es benutzt wird.

Wie für die Ansicht Daten magische Schlüssel Frage, es ist ein interessantes Problem. Wenn Sie eine Ansicht als eine Reihe von semi-unabhängigen Komponenten betrachten (besonders angesichts der neuen Unterstützung von Teilansichten), wird die Erstellung eines stark typisierten Modells weniger ideal, da die einzelnen Teile der Ansicht relativ unabhängig davon sein sollten einander.

0

Wie gehen verschiedene Personen mit diesem Problem um? Ich weiß, dass ich gerade ein paar Stunden damit verbracht habe, das Durcheinander im Modellordner zu überprüfen. Ich finde die Erstellung von Ordnern ist hilfreich bei der Verringerung der visuellen Unordnung, die Verwendung von passenden Namespaces hilft auch viel.

Aber meine Controller sind Monolithen im Moment. Das Problem ist, dass ich mich darauf konzentriert habe, bis zu diesem Punkt im Projekt zu lernen (es gibt immer noch viel zu klären).

Ich bekomme jetzt einen guten Überblick über MVC, also ist es an der Zeit, die Komplexität zu überdenken und die Controller in besser benannte und sauberere Funktionen zu verwandeln.

Brechen andere Leute ihre Controller in Subcontroller auf? (Wenn es so etwas gibt)

+0

Der Trick bei der Kodierung Ihrer Controller ist, sie anzuschauen und zu sagen: "Wenn jede Aktionsmethode mehr als 20 oder 30 Zeilen oder eine relativ kleine Zahl bekommt, wie kann ich sie reduzieren?", Halte es im Grunde TROCKEN und überlege, was du tust und verschiebe diese Logik in eine richtige SERVICE-Ebene, die wiederverwendet werden kann. –

+0

Laden Sie auch das StoreFront MVC Starter Kit von ROB CONERY herunter und sehen Sie, wie er seine Lösung überlagert -> sehr über awesomesauce. (google es, ich kann nicht gestört werden, den Link in dieser späten (frühen ?!) Stunde des Morgens zu finden ... hth! –