2010-09-28 9 views
22

Ich arbeite an meinem ersten realen ASP.NET MVC Projekt und ich habe festgestellt, dass der Controller, an dem ich gearbeitet habe, ziemlich groß wird. Dies scheint gegen die beste Vorgehensweise zu sein, Ihre Controller dünn zu halten.Behalten eines Controllers (zu viele Aktionsmethoden)

Ich habe einen guten Job gemacht, die Geschäftslogik aus den Controllern herauszuhalten. Ich benutze dafür eine separate Ebene. Jede Aktion ruft hauptsächlich eine Methode in der Business-Schicht auf und koordiniert das Endergebnis basierend darauf, ob der Modellstatus gültig ist oder nicht.

Das gesagt, der Controller hat eine große Anzahl von Aktionsmethoden. Intuitiv möchte ich den Controller in Sub-Controller zerlegen, aber ich sehe keinen einfachen Weg, dies zu tun. Ich könnte den Controller einfach in separate Controller zerlegen, aber ich verliere die Hierarchie und es fühlt sich ein bisschen dreckig an.

Ist es notwendig, einen Controller mit einer großen Anzahl von Thin-Aktionen zu refaktorieren? Wenn ja, was ist der beste Weg, dies zu tun?

+0

Sie können sie immer noch in Sub-Controller in Unterordnern sowie die Ansichten zu brechen – hunter

Antwort

17

Erstens, wenn Sie hören, dass es gut ist, Controller-Code auf ein Minimum zu beschränken, bezieht sich dies hauptsächlich darauf, jede Aktionsmethode so dünn wie möglich zu halten (setzen Sie Logik in Business-Klassen, nicht in Views und ViewModels) scheint, du machst das, was großartig ist.

Wie für "zu viele" Aktionsmethoden, dies ist ein Urteilsspruch. Es könnte tatsächlich ein Zeichen für eine gute Organisation sein, dass Sie sich auf eine Sache konzentrieren. Vielleicht verwenden Sie auch Aktionen speziell für die Verwendung mit RenderAction? Und es könnte einfach die Natur Ihrer Lösung sein, dass es viele Dinge zu tun gibt, die sich auf das Thema Ihres Controllers beziehen.

Also, meine Vermutung ist, dass es Ihnen wahrscheinlich gut geht. Um jedoch sicher zu gehen, auf Notizpapier brechen Sie den Controller in 2 oder 3 Controller, und skizzieren Sie, wie Ihre Geschichten von Aktion zu Aktion bewegen würde. Und wenn Sie feststellen, dass Ihr Workflow mit mehr Controllern funktioniert, sollten Sie das Problem lösen. Vor allem, wenn Sie diese Funktionalität später hinzufügen. Je früher Sie es ausbrechen, desto besser.

3

Gute Frage.

Ich glaube, dass ein "dünner" Controller immer noch "breit" oder "groß" sein muss, je nachdem, wie Sie die Analogie strecken wollen. Wenn es keinen sauberen Weg gibt, um einen Controller aufzulösen, der eine Menge Dinge erledigen muss, denke ich nicht, dass das ein Problem ist, solange sich jede Aktion ausschließlich auf die Vorbereitung von Views/ViewModels konzentriert und eine begrenzte Code-Größe hat.

2

Eine andere strukturelle Option, die Sie haben, ist die Einführung partieller Klassen für logische Gruppierungen von Aktionen. Und etwas wie vscommands verwenden, um die Dateien zu gruppieren.

Ich bezweifle, dass jemand mit einer magischen Anzahl von Aktionen kommen kann, die Ihnen sagt, wenn es eine gute Idee ist, Sachen zu brechen und neue Controller einzuführen, hängt es wirklich von Ihrer Domäne ab.

+8

Meiner Meinung nach mit partiellen Klassen versucht nur einen Code Geruch zu vertuschen. Wenn Sie herausfinden können, wo Sie die Klasse in Teiltöne zerlegen können (über SRP), warum nicht den ganzen Weg gehen und nur die Klasse auflösen? – Ryan

Verwandte Themen