Frage

Verzeihen Sie die vagen Titel, ich war nicht sicher, wie es zu beschreiben.

Wenn Sie ein generisches Modell „Archive“ haben, wie zeigen Sie verschiedene Ansichten / Formulare basierend auf einem Benutzer ausgewählten ‚Typen‘?

Zum Beispiel erzeugt der Benutzer ein neues „Archiv“, wird dann die Wahl von Video, Buch, Audio usw. Von dort sie verschiedene Formen auf dem Basis des Archivtyp erhalten.

Oder wäre es besser, sie in verschiedene Modelle aufgeteilt - Video, Buch, Audio?

Oder können Modelle erben (wie Video erweitert Archiv). Ich denke, diese grundlegende OOP / Klassen ist, haben aber keine Ahnung, wie das hier anzuwenden.

Beispiele von jedem MVC-Framework sind willkommen!

War es hilfreich?

Lösung

Scheint, wie Sie wäre nicht die Art, vererben Archiv haben wollen. „Immer bevorzugt Verkapselung / Eindämmung der Vererbung“.

Warum nicht eine Klasse namens Archive und ihm eine Art Eigenschaft geben. Der Typ kann Vererbung für Audio, Video, etc. spezialisiert.

Es scheint, dass Sie würde Archive spezialisiert, basierend auf einigen anderen Kriterien. „FileSystemArchivce“, „XMLArchive“, „SQLArchive“ und der Typ würde sich ändern, nicht. Aber der agilist in mir sagt, dass dies zunächst nicht necesscary sein kann, und Sie können das Design später immer Refactoring ...

Im Sinne einer Steuerung, werden Sie wahrscheinlich den größten Knall für den Dollar erhalten, indem für jeden Typen in der Ansicht, die Unterschiede der Darstellung einkapseln. So wird nur die Ansicht, die Änderungen auf der Grundlage der Art. Wahrscheinlich die Semantik und Regeln für jeden einzelnen sind die gleichen, und Sie würden nicht separate Regler für jeden Typ haben müssen. Die Ansichten werden für jeden Typ unterschiedlich sein, da es unterschiedliche Attribute haben wird.

Andere Tipps

Um zu zeigen, tatsächlich eine andere Ansicht sollte in jedem MVC-Framework einfach sein. Zum Beispiel in Microsoft ASP.NET MVC Sie würde nicht zurückkehren nur eine Ansicht von einem Controller wie folgt aus:

return View();

würde aber sagen, tatsächlich den Namen der Ansicht als Parameter:

return View("VideoArchive");

die dann die Ansicht von Ansichten / Archiv / VideoArchive.aspx zeigen würde

Ihre Modelle Video, Buch und Audio können von Archiv erben.

Und jedes Modell einen Controller hat.

http: // IhrServer / Bücher / Edit / 11

Sie müssen Ihre Benutzer erhalten, um den Typ des Archivs wählen sie wollen, bevor Sie das entsprechende Modell erstellen.

EDIT (als Antwort auf Kommentar)

In ASP.NET MVC Modell wird eine Klasse sein.

public class Video : Archive
{  
    public int Id {get;set}
    public string Name {get;set;}     
    ...
}

Sie werden auch einen Controller haben

public class VideoController : Controller
{
    public object Edit(int id)
    {
        Video myVideo = GetVideo(id);
        return View("Edit", myVideo);
    }
     ...
}

Und Sie werden eine Ansicht in Ansichten Verzeichnis zum Beispiel haben, die Seite, die enthält

public class Edit : View<Video>
{
    ...
}

So können Sie diese anrufen, wenn Sie eine URL haben, die war

http: // localhost / Video / Edit / 11

Das war alles aus dem Gedächtnis getan, so kann es einige Fehler, aber die Take-Home-Nachricht ist, dass man das Erbe am Modell angeben. Das Modell ist nur eine Klasse. In Ihrem Fall, dass Sie von Archiv erben. Sobald Sie das getan, dass das Modell um als normal weiter.

Es scheint mir, dass ein fester Punkt für MVC ist, dass Sie nicht das Modell anpassen müssen kann (oder den Controller - davon wollen Sie nur eine), wenn alle Benutzer braucht, ist eine andere Ansicht. Mehrere Modelle erscheint nur, wenn der Speicher (Persistenz) Architektur eine Notwendigkeit diktiert. Einige Funktionen wie zB Datenzugriffsobjekte (DAO) würden möglicherweise als ein anderes Tier erscheinen, zwischen dem Controller und dem Modell, sollten Sie mehrere Modelle benötigen.

Werfen Sie einen Blick auf die Apache Struts Projekt für Beispiele. Wie bereits erwähnt in Struts für Newbies , „Struts gut nutzen zu können, ist es wichtig, ein gutes Verständnis für die Grundlagen zu haben. Beginnen Sie mit der Key Technologies Primer und Studium keine neuen Themen."

Für eine andere Ressource finden Sie unter Web-Tier-Anwendung Gerüstgestaltung (Sun J2EE Riss)

Die Einzel Prinzip Verantwortung (PDF) heißt es:

  

ES DARF NIE mehr als ein Grund für eine Klasse zu ändern.

Ihr Archiv Klasse gegen dieses Prinzip durch mehrere verschiedene Arten von Archiven Handhabung. Zum Beispiel, wenn Sie das Video-Archiv aktualisieren müssen, modifizieren Sie auch die Klasse, das Buch und Audio-Archive behandelt.

Der geeignete Weg, dies zu umgehen ist für jede andere Art von Archiv separate Klassen zu erstellen. Diese Arten sollten eine gemeinsame Schnittstelle implementieren (oder eine gemeinsame Basisklasse erben), so dass sie austauschbar behandelt werden können (polymorph) durch Code, der nur über Archiv kümmert, nicht spezifische Archivtypen.

Wenn Sie diese Klassenhierarchie eingerichtet haben, brauchen Sie nur einen einzigen Controller und Ansicht für jede Modellklasse.

Für Bonuspunkte kann das Einzelne Verantwortung Prinzip rechtfertigt auch eine Factory-Methode oder abstraktes Werk mit für Ihr Modell, View und Controller Objekte erstellen (anstatt neuen-ing sie inline). Immerhin ein Objekt erstellen und die Verwendung dieser Aufgabe sind unterschiedliche Verantwortlichkeiten, die aus verschiedenen Gründen geändert möglicherweise werden müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top