2016-04-22 26 views
1

Mein Home Model/View/Controller (der den Anfangszustand der Seite konfiguriert) funktioniert einwandfrei.Benötige ich ein separates Modell/Controller für jedes Szenario oder kann ich ein einzelnes Modell/Controller für mehrere Szenarien verwenden?

Ich muss auch auf Änderungen reagieren, die der Benutzer auf der Seite vornimmt (Auswahl einer Option aus einer Auswahl, Ankreuzen einer Checkbox, etc.), und das funktioniert noch nicht.

Vielleicht ist der Grund, warum ich Probleme habe, dass ich versuche, mein "Heim" -Modell wiederzuverwenden, das nicht nur das enthält, was ich für die Seiteninitialisierung benötige, sondern auch einige andere Dinge. Zum Beispiel mein Modell:

public class HomeModel 
{ 
    public DataTable Units { get; set; } 
    public DataTable Reports { get; set; } 
    public DataTable UnitReportPairEmailVals { get; set; } 
    public DataTable UnitReportPairGenerateVals { get; set; } 
    . . . 
} 

... enthält Dinge, die Seite zunächst muss („Einheiten“ und „Berichte“ und die von den drei Punkten Punkte dargestellt Dinge), aber auch Dinge erst später benötigt werden (die andere zwei gezeigt).

Ich frage mich, ob zumindest ein Teil meines Problems mit dem Zurückholen dieser Daten (über einen Ajax-Aufruf zu einer anderen Methode in HomeController) ist, weil ich ein separates Modell und Controller für den Ajax-Aufruf verwenden sollte.

Also frage ich mich: ist Model/Controller Proliferation ein Code Geruch/Anti-Muster, oder notwendig? Soll ich ein anderes Modell erstellen wie:

... und einen entsprechenden separaten Controller dafür?

Wenn ich ein komplexes Modell habe, das in verschiedenen Szenarien verwendet wird, scheint es, dass jedes Mal, wenn ich ein Modell als Rückgabewert (Ergebnis) einer Aktion zurückgebe, viele überflüssige/unbelebte Dinge ebenfalls übergeben werden zurück (nur die Mitglieder, an denen ich mich gerade interessiere, werden in den Controller eingetragen, wodurch viele leere/null-Mitglieder zurückgegeben werden).

Also meine Frage ist, sollte ich separate Modelle/Controller für jeden "Anwendungsfall" erstellen, oder ist es okay - oder noch besser - eine Menge Dinge in einem Modell/Controller-Paar zu kombinieren?

+2

Ein gängiger Ansatz besteht darin, ein paar bestimmte 'ViewModel'-Objekte an Ihren Client zu übergeben - und dann möglicherweise einen Auto-Mapper zu verwenden, um das Common-but-Complex' Model' einem szenariospezifischen 'ViewModel' zuzuordnen. Ich sehe keinen Grund, in Ihrem Fall neue 'Controller' oder' Model' Klassen zu erstellen. – Clay

+0

Wenn Sie die Ansicht nicht ändern, warum sollten Sie einen anderen Controller erstellen? Meinst du nicht noch eine ** Action ** in deinem bestehenden Controller? –

+0

Die Wiederverwendung eines zusammengesetzten Modells scheint eher ein Anti-Pattern als eine Proliferation von Modellen zu sein. Außerdem bin ich etwas skeptisch, wenn ich 'DataTable' in einem Modell verwende. –

Antwort

2

Es gibt keinen zwingenden Grund, ein Model zu einem einzigen Controller oder zu erwarten zu begrenzen, dass ein Controller nur ein Model hat. Sie könnten Ihre gesamte App in einem einzigen Controller (wirklich schlechte Idee, nebenbei) schreiben.

Im Allgemeinen ist die Division eine logische ... eine Reihe von Aktionen, die mit dem gleichen Satz von Models in einem Controller sprechen. Es ist mehr, wenn das Gehirn nicht schmilzt, wenn Sie die Quelldatei öffnen.

Sie haben oft mehrere Views und sie neigen dazu, Name-für-Name mit der Actions in Ihrem Controller Mach ... Mach dies aber nicht streng durchgesetzt.

Wenn Sie das Gefühl, du bist mehr Daten in der View als nötig bekommen, kann dies durch die Abbildung der Model auf eine vereinfacht werden ViewModel den Code in der View zu vereinfachen. Ja, das ist MVVM ... und wieder ... schmerzt das Gehirn weniger mit dem einfacheren Objekt in der View.

Sie können das Objekt manuell in Ihrem Controller abbilden, oder Sie können einen Auto-Mapper dazu verwenden. Es gibt eine Reihe zur Auswahl ... und sie machen die MVVM zu einer einfacheren Sache. Sie müssen nicht unbedingt eins. Sie sind nur hilfreich.

+0

Ich frage mich, wie lange es dauern wird, bis "Florida Hill Country" * die Insel von Florida wird. * Übrigens, obwohl ich in St. Augustine gewesen bin, nein, ich wusste, dass kein Teil von Florida flacher als der sprichwörtliche Flapjack war. –

+1

Tatsächlich - gruselige Vorschläge überall. Wir sind bei 110 '... gut für mindestens weitere 10 Jahre? – Clay

Verwandte Themen