Frage

Die neu in ASP.NET MVC, ich habe mich gefragt, über die Unterzeichnung der Controller-Methoden. In allen Beispielen die ich gesehen habe, scheinen sie immer Action zurückkehren, selbst wenn sie eine Viewresult-Instanz oder ähnlich tatsächlich zurück.

Hier ist ein häufig gesehenes Beispiel:

public ActionResult Index()
{
    return this.View();
}

In einem solchen Fall wäre es nicht sinnvoll, das Verfahren als public ViewResult Index() zu erklären, und stärker Art Unterstützung erhalten?

Experimentation zeigt an, dass dies funktioniert, so scheint es möglich.

Ich weiß, Sie, dass es Situationen geben kann, in denen der Polymorphismus gewünscht wird (zB wenn Sie nur in bestimmten Situationen umgeleitet werden, aber eine Ansicht in anderen Situationen zeigen), aber wenn die Methode immer Rückgabe eine Ansicht, würde ich einen Viewresult wünschenswerte finden.

Im Hinblick auf die zukünftige Kompatibilität bietet Action offensichtlich eine robustere Unterschrift, aber wenn man die gesamte Code-Basis steuert, ist es immer möglich, ein Verfahren Unterschrift auf eine allgemeinere Rückgabetyp zu ändern, wenn das sollte auch in Zukunft notwendig werden.

Sind die andere Überlegungen, die ich nicht bewusst bin, oder sollte ich gehen Sie einfach weiter und erkläre meine Controller-Methoden mit spezifischen Return-Typen?

War es hilfreich?

Lösung

Sie können absolut spezifisch Rückgabetypen verwenden, obwohl die meisten Beispiele, die im Internet scheint die Action zurückzukehren. Das einzige Mal, dass ich zurückkehren würde die Action Klasse ist, wenn unterschiedliche Wege der Aktionsmethode verschiedene Subtypen gibt.

Steven Sanderson empfiehlt Rückkehr auch bestimmte Arten in seinem Buch Pro ASP.NET MVC-Framework . Werfen Sie einen Blick auf das folgende Zitat:

"Diese Aktion Methode erklärt ausdrücklich, dass es eine Instanz von Viewresult zurückkehrt. Es würde genau das gleiche, wenn stattdessen die Methode Rückgabetyp Action (die Basisklasse für alle Ergebnisse der Aktion) ist. In der Tat, einige ASP. NET MVC Programmierer erklären alle ihre Aktionsmethoden als eine unspezifische Action Rückkehr, auch wenn sie sicher ist, dass es immer eine bestimmte Unterklasse zurück. es ist jedoch ein gut etabliertes Prinzip in der objektorientierten Programmierung, dass Methoden, um den spezifischsten Typen zurückgeben sollten sie können (wie auch die allgemeinsten Parametertypen zu akzeptieren sie können). dieses Prinzip nach maximiert Komfort und Flexibilität für Code, der Ihre Methode aufruft, wie die Komponententests. "

Andere Tipps

Sie immer die genaueste Art kehren Sie zurückkehren können. So sollten Sie eine Viewresult zurück, wenn die Aktion immer einen Blick zeigt. Ich würde nur Action verwenden, wenn Sie in Viewresult in einigen Fällen zurückkehren (ungültige Daten geschrieben) oder einen RedirectToRouteResult in anderen Fällen.

Mit etwas erweitert Action / Szenarien auszuführen, können Sie auch ganz andere Dinge zurück, die nichts mit Action zu tun hat.

Action ist die Basisklasse für die verschiedenen Rückgabetypen. So Ihre Aktion muss eine Action zurückkehren oder eine Klasse von ihm abgeleitete , um zu arbeiten. Häufig sind dies ViewResult, JsonResult, etc.

Yep I Sanderson Buch, und ich mochte diesen Teil spezifisch über das Sein, so dass etwas war mir ärgerlich, wenn ich bei anderen Controller-Aktion Beispielen anschaute. Meine Philosophie auch b4 Lernen MVC war, dass da Funktionen (Methoden, die einen Wert zurückgeben) behandelt werden sollen, als ob Sie eine Variable wurden deklarieren / in Kontext für eine Variable / ref des gleichen Typs, spezifisch über die Art, wie Sie ersetzbar seinen würde, wenn eine var deklarieren (man denke an mich als zu wollen vermeiden alle Variablen als Typ „Objekt“ in einem App defnining - robusten, aber Sie verlieren Sicherheit einig Design-Zeit überprüft und -typ). Erleichtert einen Controller Unit-Test für den korrekten Rückgabetyp als auch.

Für zugehörige Referenz Besuche Listkov des Substitutionsprinzip (die "L" in "SOLID") auch.

scroll top