Wenn Jeremy & amp; Tschad berichtete über ihr FubuMvc-Projekt , einer ihrer Unterscheidungsmerkmale war ihr" Thunderdome Principal ":
Das "Thunderdome-Prinzip" - Alles Controller-Methoden nehmen eins auf ViewModel-Objekt (oder null Objekte in einige Fälle) und eine einzige zurückgeben ViewModel-Objekt (ein Objekt tritt ein, ein Objekt verlässt). Der Controller Klassen werden NIE direkt ausgesetzt sein alles, was mit HttpContext zu tun hat. Nichts lässt mich weinen wie sehen Leute, die versuchen, Tests zu schreiben, die spotten oder stub das neue IHttpContextWrapper Schnittstelle. Ebenso Controller Methoden geben ViewResult nicht zurück Objekte und sind in der Regel entkoppelt von allen MVC-Infrastruktur. Wir hat diese Strategie sehr früh als eine Möglichkeit, Controller-Tests durchzuführen einfacher mechanisch. Es ist auf jeden Fall erreicht dieses Ziel, aber es ist auch gemacht der Controller-Code ist sehr gestrafft und einfach zu lesen. Wir erklären wie Das funktioniert bei KaizenConf.
Welchen Vorteil hat ihr 'ein ViewModel (oder null) in -Ansatz?
Der Hauptvorteil ist, dass es eine Konvention ist und die Dinge über alle unsere Controller hinweg konsistent sind. Es erleichtert uns das Testen von "Kontexten" / Fixtures, die die Umgebung in einem Integrationstestszenario initialisieren können. In den meisten Fällen ist Konventionen == Schnelligkeit, da es viele "Was-wäre-wenn" -Szenarien von Ihren Design-Überlegungen entfernt.
Da alle unsere Controller-Aktionen dem gleichen Muster folgen, können wir viele Dinge annehmen und es beschleunigt und rationalisiert unsere Controller-integrierten Test-Bemühungen.
Es ist nicht falsch, mehrere Argumente für eine Controller-Aktion zu haben, aber wir haben herausgefunden, dass uns ein echtes Model-Objekt zusätzliche Funktionalität bietet, da das Modell einfache Logik enthalten und Convenience-Eigenschaften aufzeigen kann, die einfach mehr sein können komplexe Aspekte des eigenen Zustands, usw. - im Grunde ist dies das Argument für jedes Rich-Modell und nicht nur für das Thunderdome / OMIOMO-Muster.
Der Vorteil ist, dass Sie sich nicht auf irgendeine Art von Kontext (wie zum Beispiel Sitzungsstatus) von außerhalb der Controller-Methoden verlassen. Das macht es einfacher, sie zu testen, da Sie diesen Kontext nicht mit Mocks "simulieren" müssen, aber es macht es auch weniger praktisch, da Sie alles nach Parametern übergeben müssen.
Der Vorteil des Thunderdome-Prinzips ist, dass es die Controller vereinfacht. Da die Zuordnung von http-Werten zu Objekten außerhalb der Controller erfolgt, bedeutet dies, dass die Controller nur das tun, was sie tun sollten.
Tags und Links asp.net-mvc model-view-controller controller viewdata fubumvc