2016-05-19 13 views
2

Derzeit ist die Serviceteil Modell Schicht hält MainService mit folgenden ZielenVerwendung von Ansichten und Vorlagen

MainService => Communicates with persistence layer, 
       does the UI logic, 
       renders the respective view 

Die OP von the question here beschreibt die Idee; Sichten sollten die Benutzeroberfläche ausführen und dann die entsprechende Vorlage rendern (abhängig).

Ein Beispiel für MainService ist ähnlich

echo $this->factory->template() 
    ->file('/path/to/template') 
    ->set('url', 'some/url') 
    ->render(); 

Es ist klar, dass dies eindeutig mit dem Konzept der Views widerspricht. Und das ist der Punkt, an dem ich verwirrt bin - die aktuelle Implementierung des Dienstes sieht sehr nach einer Ansicht aus. Ist es eine Aussicht?

+0

Diese Definition scheinen zu verwenden „Service“ für das, was ich einen Controller in Betracht ziehen würde. Wenn Sie sich ansehen, wie einige große "mvc" -Frameworks (symfony, laravel) mvc implementiert haben, leiten Sie eine Anfrage an einen Controller weiter, der die Benutzereingaben übernimmt und tut, was immer er tun sollte, vorzugsweise über Dienste. Und dann eine Ansicht/Vorlage rendern – JimL

+0

Afaik, der Controller in PHP ist meist ein Service, der ein Teil der Modellschicht ist. – sitilge

+0

In den mentionef "mvc" -Implementierungen verwenden sie Dienste wie einen Protokolldienst, Mail-Dienst usw. Beachten Sie, dass ich ständig "mvc" mit Anführungszeichen verwende, da dieses Muster nur bis zu einer bestimmten Ebene implementiert ist. Es scheint nicht in Stein gemeißelt und oft etwas eigensinnig zu sein, wie diese (und andere) Muster umgesetzt werden. Wenn Sie an einer Debatte über die Struktur/das Muster interessiert sind, schlage ich vor, dass Sie bei http://codereview.stackexchange.com/ – JimL

Antwort

-1

Der Controller ist verantwortlich für:

  • Lesen Benutzereingabe

  • Daten anfordert, von dem Modell

  • mit diesen Daten die Ansicht Aufruf

Das Modell ist verantwortlich für:

  • Abrufen von Daten aus Persistenz-Schicht

  • Gestaltung der Daten als vom Controller angeforderte

The View ist verantwortlich für:

  • Rendering die Vorlage mit den Daten bereitgestellt vom Controller und zeigt es dem Benutzer

In Ihrem Beispiel ist es richtig, dass MainService mit der Persistenzschicht kommuniziert. Aber UI-Logik zu machen und die Ansicht (Vorlage) zu rendern ist ein Job für die Ansicht.

Wenn Sie ein Framework wie Laravel, Zend, Angular2 verwenden, werden Sie nie den View-Layer sehen. Sie definieren die Vorlage, aber das Framework erstellt das Rendering basierend auf den Daten, die Sie im Controller bereitstellen.

Beispiel mit Laravel fließt für eine Benutzerprofilseite angezeigt wird:

  • Laravel wird eine Controller-Aktion aufrufe, basierend auf Routeneinstellungen (bestimmte URL zu einem bestimmten Controller und Aktion)

  • -Controller liest Parameter (User-ID)

  • Controller von Userservice der Nutzer mit dieser ID anfordern,

  • Der Dienst wird eine Anfrage an die Datenbank machen und ein User-Modell (Objekt) erstellen, die

  • Der Controller stellt rufen Sie die Ansicht mit einer Template-Kennung und eine Reihe von Daten aus dem Objekt ANWENDERS

    zu-Controller zurück
  • die Ansicht wird die Vorlage mit Daten aus dem Array

    macht
+0

Was Sie dort beschreiben, ist nicht MVC. Es ist nur ein weiteres schreckliches Rails-ähnliches Framework. –

+0

Gern können Sie Ihre Meinung dazu mitteilen, was MVC ist –

Verwandte Themen