Heim  >  Artikel  >  Backend-Entwicklung  >  Yii Framework Offizieller Leitfaden Serie 15 – Grundlagen: Best MVC Practices

Yii Framework Offizieller Leitfaden Serie 15 – Grundlagen: Best MVC Practices

黄舟
黄舟Original
2017-02-13 09:08:14964Durchsuche



Obwohl Model-View-Controller (MVC) bei fast jedem Webentwickler bekannt ist, wie wird er in der tatsächlichen Anwendungsentwicklung eingesetzt? Die Verwendung von MVC bereitet vielen Menschen immer noch Probleme. Die Kernidee hinter MC ist die Wiederverwendbarkeit des Codes und die Trennung von Logik und Ansichten . In diesem Abschnitt beschreiben wir, wie Sie MVC besser zum Entwickeln von Anwendungen verwenden können, wenn Sie das Yii-Framework verwenden.

Zur besseren Erklärung gehen wir davon aus, dass die Webanwendung die folgenden Unteranwendungen enthält:

  • Frontend: eine öffentliche Website-Schnittstelle für Endbenutzer;

  • Backend: Bietet Verwaltungsfunktionen zur Verwaltung der gesamten Website-Anwendung, auf die normalerweise nur Administratoren zugreifen und sie verwenden können.

  • Konsole: Kann in einem Terminalfenster ausgeführt werden Anwendungen, die Konsolenbefehle enthalten;

  • Web-API: Bietet eine Schnittstelle für Dritte zur Interaktion mit dieser Anwendung.

Diese Unteranwendungen können in Form von Modulen implementiert werden oder es kann sich um Yii-Anwendungen handeln, die Code mit anderen Unteranwendungen teilen.

1. Modelle

Modelle stellen die zugrunde liegende Datenstruktur einer Webanwendung dar. Beispielsweise kann es sich um ein LoginForm-Modell handeln Wird sowohl vom Front-End als auch vom Back-End einer Anwendung verwendet. Ein News-Modell kann daher von den Konsolenbefehlen, Web-APIs und dem Front-/Back-End einer Anwendung verwendet werden 🎜>

sollte Eigenschaften zur Darstellung spezifischer Daten enthalten;
  • sollte Geschäftslogik (z. B. Validierungsregeln) enthalten, um sicherzustellen, dass die dargestellten Daten die Designanforderungen erfüllen;
  • kann Code zum Bearbeiten von Daten enthalten. Beispielsweise kann ein
  • -Modell neben der Darstellung der Sucheingabedaten eine
  • -Methode zum Implementieren der eigentlichen Suche enthalten.

    SearchFormsearch

    Manchmal kann das Befolgen der letzten Regel dazu führen, dass ein Modell sehr fett wird und zu viel Code in einer einzelnen Klasse enthält. Außerdem kann es schwierig sein, das Modell zu warten, wenn der darin enthaltene Code anderen Zwecken dient 🎜> Das Modell kann eine Methode namens  
  • enthalten, die nur vom Front-End verwendet wird. Es kann auch eine Methode namens  
enthalten, die nur vom Back-End verwendet wird. Dies kann für eine kleine bis mittlere Anwendung in Ordnung sein Größe. Für große Anwendungen kann die folgende Strategie verwendet werden, um Modelle wartbarer zu machen:

NewsgetLatestNewsgetDeletedNewsDefinieren Sie eine

Modellklasse, die nur Code enthält, der von verschiedenen Unteranwendungen (z. B. Front) gemeinsam genutzt wird
  • NewsBaseDefinieren Sie in jeder Unteranwendung ein

    -Modell, indem Sie von
  • aus den gesamten Code platzieren, der für die Unteranwendung spezifisch ist in diesem
  • -Modell.

    NewsNewsBaseNewsWenn wir also diese Strategie in unserem obigen Beispiel anwenden würden, würden wir ein

    -Modell in der Front-End-Anwendung hinzufügen, das nur das enthält
  • -Methode, und wir würden ein weiteres
-Modell in der Back-End-Anwendung hinzufügen, das nur die

-Methode enthält.NewsgetLatestNewsIm Allgemeinen sollten Modelle keine Logik enthalten, die sich direkt mit Endbenutzern befasst. Genauer gesagt sollten ModelleNewsgetDeletedNews

nicht

,
    oder andere ähnliche Variablen verwenden, die direkt mit der Endbenutzeranforderung verknüpft sind. Denken Sie daran, dass ein Modell möglicherweise von verwendet wird eine völlig andere Unteranwendung (z. B. Unit-Test, Web-API), die diese Variablen möglicherweise nicht zur Darstellung von Benutzeranforderungen verwendet. Diese Variablen, die sich auf die Benutzeranforderung beziehen, sollten vom Controller verarbeitet werden.
  • $_GET$_POSTEs sollte vermieden werden, HTML oder anderen Präsentationscode einzubetten. Da der Präsentationscode je nach den Anforderungen des Endbenutzers variiert (z. B. können Front-End und Backend die Details einer Nachricht in völlig unterschiedlichen Formaten anzeigen), sollte er besser durch Ansichten berücksichtigt werden.

  • 2. Ansichten

  • Ansichten sind dafür verantwortlich, Modelle in dem Format darzustellen, das Endbenutzer wünschen. Im Allgemeinen sollten Ansichten

sein enthalten hauptsächlich Präsentationscode wie HTML und einfachen PHP-Code zum Durchlaufen, Formatieren und Rendern von Daten.

  • Es sollte vermieden werden, Code zu enthalten, der explizite DB-Abfragen ausführt. Solcher Code sollte besser in Modellen platziert werden .

  • sollte den direkten Zugriff auf

    ,
  • oder andere ähnliche Variablen vermeiden, die die Endbenutzeranforderung darstellen. Dies ist die Aufgabe des Controllers Anzeige und Layout der vom Controller und/oder Modell bereitgestellten Daten, jedoch kein Versuch, direkt auf Anforderungsvariablen oder die Datenbank zuzugreifen.
  • kann direkt auf Eigenschaften und Methoden von Controllern und Modellen zugreifen. Dies sollte jedoch nur zu Präsentationszwecken erfolgen.

Ansichten können auf unterschiedliche Weise wiederverwendet werden:

  • Layout: gemeinsame Präsentationsflächen (z. B. Seitenkopf, Fußzeile) können in eine Layoutansicht eingefügt werden.

  • Teilansichten: Verwenden Sie Teilansichten (Ansichten, die nicht durch Layouts dekoriert werden), um Fragmente des Präsentationscodes wiederzuverwenden. Beispielsweise verwenden wir _form.php Teilansicht, um das Modelleingabeformular darzustellen, das sowohl auf den Modellerstellungs- als auch auf den Aktualisierungsseiten verwendet wird.

  • Widgets: wenn für die Präsentation viel Logik erforderlich ist B. eine Teilansicht, kann die Teilansicht in ein Widget umgewandelt werden, dessen Klassendatei der beste Ort ist, um diese Logik zu enthalten. Für Widgets, die viel HTML-Markup generieren, ist es am besten, für das Widget spezifische Ansichtsdateien zu verwenden, um das Markup zu enthalten.

  • Hilfsklassen: In Ansichten benötigen wir oft einige Codeausschnitte, um das Markup zu enthalten Erledigen Sie kleine Aufgaben wie das Formatieren von Daten oder das Generieren von HTML-Tags. Anstatt diesen Code direkt in den Ansichtsdateien zu platzieren, besteht ein besserer Ansatz darin, alle diese Codeausschnitte in einer Ansichts-Hilfsklasse zu platzieren. Dann verwenden Sie einfach die Hilfsklasse in Ihren Ansichtsdateien. Yii liefert ein Beispiel für diesen Ansatz. Yii verfügt über eine leistungsstarke CHtml-Hilfsklasse, die häufig verwendeten HTML-Code erstellen kann. Hilfsklassen können in einem automatisch ladbaren Verzeichnis abgelegt werden, sodass sie ohne explizite Klasseneinbindung verwendet werden können.

3. 控制器

Controller sind der Klebstoff, der Modelle, Ansichten und andere Komponenten zu einer ausführbaren Anwendung zusammenhält. Controller sind für die direkte Bearbeitung von Endbenutzeranfragen verantwortlich. Daher können Controller

  • auf $_GET$_POST und andere PHP-Variablen zugreifen, die Benutzeranfragen darstellen;

  • können Modellinstanzen erstellen und verwalten ihre Lebenszyklen. Beispielsweise kann der Controller bei einer typischen Modellaktualisierungsaktion zunächst die Modellinstanz erstellen. Füllen Sie dann das Modell mit der Benutzereingabe von$_POST; Nach erfolgreichem Speichern des Modells leitet der Controller den Benutzerbrowser möglicherweise zur Modelldetailseite weiter. Beachten Sie, dass sich die eigentliche Implementierung zum Speichern eines Modells im Modell und nicht im Controller befinden sollte.

  • Es sollte vermieden werden, eingebettete SQL-Anweisungen zu enthalten, die besser in Modellen aufbewahrt werden.

  • sollte vermeiden, HTML oder andere Präsentations-Markups zu enthalten. Dies wird besser in Ansichten aufbewahrt.

In einer gut gestalteten MVC-Anwendung sind Controller oft sehr dünn und enthalten wahrscheinlich nur ein paar Dutzend Codezeilen; während Modelle sehr umfangreich sind und den größten Teil des Codes enthalten, der für die Darstellung und Bearbeitung der Daten verantwortlich ist. Dies liegt daran, dass die durch Modelle dargestellte Datenstruktur und Geschäftslogik typischerweise sehr anwendungsspezifisch ist und stark angepasst werden muss, um die spezifischen Anwendungsanforderungen zu erfüllen. während die Controller-Logik in allen Anwendungen häufig einem ähnlichen Muster folgt und daher durch das zugrunde liegende Framework oder die Basisklassen durchaus vereinfacht werden kann ,更多相关内容请关注PHP中文网(www.php.cn)!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn