Korrekter Entwurf eines MVC-Projekts

8

Ich benutze Kohana schon seit ein paar Monaten und bin immer noch relativ neu im MVC-Stil der Organisation von Code / Präsentation / db-layer. Leider gibt es zwar viel Dokumentation darüber, wie man einen Controller erstellt, eine Ansicht erstellt und mit einer Datenbank über ein Modell interagiert, aber ich habe nicht viele Ressourcen gefunden, die sich mit sauberen und vorgeschlagenen Entwicklungsmustern befassen.

Lassen Sie mich ein kurzes Beispiel geben:

Mein neuestes Projekt hat einen Controller, weil ich mir nicht sicher bin, ob ich viel mehr machen sollte ... oder wann ich einen neuen machen sollte. Wie genau ermittle ich, wann ein neuer Controller benötigt wird und wann ein neues Modell benötigt wird?

    
Sampson 19.06.2009, 14:09
quelle

7 Antworten

3

Ich würde vorschlagen, dass Sie sich zuerst die ressourcenorientierte Architektur ansehen. Dadurch erhalten Sie keine direkten Richtlinien zur Organisation Ihres Codes. Wenn man jedoch in Bezug auf Ressourcen denkt, ist das Leben einfacher, wenn es darum geht, ob man einen neuen Controller erstellt oder nicht. Sobald Sie es geschafft haben, eine Ressource in Ihrem System zu identifizieren, ist es normalerweise eine gute Sache, ein Modell plus einen Controller dafür zu erstellen - obwohl dies nur eine Faustregel ist.

Einige zusätzliche Punkte:

  • suchen Sie nach Ressourcen und erstellen Sie für jede von ihnen ein Modell und einen Controller (Faustregel)
  • Haben Sie keine Angst, Modelle für Ressourcen zu erstellen, die nicht persistieren
  • Denken Sie an Controller als "plumbing" oder "Verdrahtung" von Benutzer an die Geschäftsdomäne - ihre Rolle ist es, Benutzeranfragen zu behandeln und die Antwort zurück zu ihnen - halten sie so dünn wie möglich
Milan Novota 20.06.2009, 10:04
quelle
2

Der Daumen der Regel lautet wie folgt: Wenn ich eine neue Art von "Element", dass meine App identifiziert. muss man verwalten, frage ich mich selbst diese Fragen:

(1) Sollen Gegenstände dieser Art dauerhaft sein?

(2) Wird es viele Instanzen dieses Elements geben?

Wenn die Antwort auf beide Fragen positiv ist, komme ich zu dem Schluss, dass das Element ein Modell (oder Modellelement oder Domänenklasse, abhängig von der Terminologie Ihres MVC-Frameworks) sein sollte. Wenn ich ein neues Modellelement definiere, definiere ich auch einen Controller dafür, der die vier grundlegenden Operationen unterstützt: Erstellen, Abrufen, Aktualisieren, Löschen (wahrscheinlich kann Ihr Framework einen Standard-Controller für Sie generieren).

    
Itay Maman 19.06.2009 14:34
quelle
2

Vielleicht möchten Sie eine Kopie von Martin Fowlers "Patterns of Enterprise Application Architecture" erhalten. Im Abschnitt "Webpräsentation" wird ausführlich erläutert, wie Sie Ihren Code strukturieren können, wenn Sie ein von Front Controller gesteuertes Framework verwenden, wie dies bei der aktuellen Welle von MVC-Frameworks der Fall ist.

    
jared 19.06.2009 19:52
quelle
1

Ich mag kleine Controller mit einer klar definierten Funktion oder einem Satz von Funktionen. Dies bedeutet normalerweise einen Controller pro Seite (oder einen Satz ähnlicher Seiten). In meiner Kohana Seite CSSMySite habe ich über Blog-, Kontakt-, CSS- und Post-Controller.

Alles, was der Controller tut, ist die Vorlage. Der Blog-Controller interagiert mit dem Blog-Modell, um mehrere Einträge aus der Datenbank aufzulisten. Der Post-Controller interagiert mit dem Blog-Modell, um einen Beitrag aus der Datenbank anzuzeigen.

Jedes Mal, wenn ich Daten habe, die persistent sind (Blog-Posts) oder mehrfach verwendet werden (Liste von Zuständen für eine Dropdown-Box), geht es in das Modell. Auf Modelle kann von verschiedenen Controllern zugegriffen werden, so dass es keine Eins-zu-eins-Zuordnung von Modell zu Controller geben muss.

    
Emily 22.06.2009 11:49
quelle
1

Vielleicht ist es eine gute Möglichkeit, eine gute MVC-Programmierung zu lernen, wenn Sie etwas Zeit in Ruby-on-Rails verbringen. Ich habe vor einer Weile angefangen, Schienen zu benutzen, und als indirektes Ergebnis glaube ich, dass ich MVC jetzt sehr gut verstehe. Ich betrachte Schienen als den Inbegriff von MVC. Zumindest könnte es Spaß machen, MVC zu lernen ... was denkst du?

    
tybro0103 19.01.2010 20:19
quelle
0

Hier ist ein Beispiel, was ich in meiner Kohana App gemacht habe.

Ich brauchte einen Bereich mit den neuesten Nachrichten, also habe ich einen Controller, ein Modell und eine Ansicht mit dem Titel "news" eingerichtet.

Mein News Controller hatte die Methoden index() , feed() und media_releases() .

Mein Modell bestand aus Datenbankabfragen, die meine Nachrichten von einer MySQL-Datenbank beziehen.

Und meine Ansicht ist nur eine Menge HTML mit einigen <?php echo $title; ?> und ähnlichem.

    
alex 22.06.2009 02:44
quelle
0

Gibt es einen Grund, warum Sie keine generischen Systeme definieren können, die global arbeiten, um Datenbankmetadaten hochzuladen? Es scheint mir generell so zu sein, irgendeinen Code zu schreiben, um auf einfache Daten zuzugreifen und sie anzuzeigen, eine unnötige Redundanz.

    
Einstein 22.06.2009 02:57
quelle