ptra
Avatar ptra
Themenersteller
Designerin (Print & Web)
Content Meister (473 Beiträge)

MVC - möchte gern mehr wissen

am 06.08.2012, 18:29 Uhr eröffnete ptra folgenden Thread
Sonstige    5857 mal gelesen    6 Antwort(en).

Hallöle!

Model View Controller – könnte mir das jemand irgendwie verständlich erklären oder einen Link zu diesem Thema posten. Das wäre super.

Die Wiki-Erklärung habe ich mir schon reingezogen, kann aber nicht wirklich was damit anfangen.

Gruß. Petra


Gegen die Infamitäten des Lebens... (siehe Hermann Hesse) http://www.universoom.de

romacron
JDev Xer
Content Gott (1224 Beiträge)
am 06.08.2012, 21:22 Uhr schrieb romacron

Hallo Petra,

vorab, das für dich speziell und verständlich zu erklären oder gar zu definieren wird schwierig.

MVC ist an sich ein Konzept das jeder Programmierer ein wenig anders ausführt
(Es ist halt ein Konzept).

Ziel vom MVC ist es den Quellcode wartbarer und wiederverwendbar zu machen und vor allem diese Quellcode-Müllhalden weg zu bekommen.

Mega beschi**en sind die WP Schnipsel die hier gepostet wurden. Es wird im Template die Datenbank abgefragt. Wenn du ein 2 Template oder layout baust musst du die Datenbankabfrage kopieren und ins neue Template einbauen. Nun stellst du fest, das die Query nicht optimal ist. Im ersten Template passt du es noch an, im Zweiten vergisst du es.
Vielleicht als bildliche Komponente für solchen Unsinn.
Aufgabe: Weihnachtsplätzchen backen.
Weil man zu faul, zu doof oder irgendwie nicht auf den Trichter kommt, dass es Förmchen braucht, schneidet man die Weihnachtsmänner mit der Schere oder dem Messer aus.

Also, keine Förmchen kein Backen. Struktur muss her.

Wir brauchen einen der Clever ist und sagt das wir Förmchen haben müssen.
Dann einen Sklaven, der die Förmchen kauft, den Teig ausrollt und die Teile aussticht.
Der Tolpatsch fehlt noch, der macht die Schoko Streusel darauf, packt die in die Kiste und bringt die zur Weihnachtsfeier.

Damit haben wir die Arbeit so verteilt, das sich nur einer die Finger schmutzig macht (das Model/Sklave).
Ein Doofer der kleckert und am besten weit von uns weg ist(before er noch Schaden anrichtet), um die Backsachen auszuliefern(view/Doofie).
Einer fehlt noch, der Boss, Sein Job ist es den Beiden anderen zu sagen, was sie tun sollen. Er nimmt auch die Bestellungen für eine weitere Ladung Kekse an(Controller).

...passt das soweit?

Nun das ganze Programmiert(..dies ist nur eine Art der Anwendung des MVC Konzeptes).
Ein User möchte sich über die Webseite einloggen und hat seine Zugangsdaten eingegeben.
Der Boss:
schaut sich die Anfrage genau an.
Validiert die Anfrage und entfernt "Tipfehler" und andere Häggerein.
ist er mit Anfrage zufrieden überlegt er wem er die Anfrage am besten aufbürden kann.
Damit sind wir beim Model(der Boss hatte das Login-Model gewählt und dem Login-Model gesteckt, Username und Passwort)
Das Model:
holt sich die Zugangsdaten für die Datenbank aus der Config
stellt eine Datenbankverbindung her(wenn das nicht klapp petzt er das dem Boss)
nun der eigentliche Job, er vergleicht die vom Boss bekommenen Zugangsdaten mit denen die in der Datenbank liegen.
Endweder findet er die oder eben nicht. Beides erzählt er dem Boss. Wortkarg mit "hab ich nicht, kenn ich nicht" oder "ja kenn ich der heisst so und so, war dann und dann hier....blabla"

Nun muss der Chef entscheiden was zu tun ist.
Hat das Model die Daten nicht gefunden, speise ich den User mit nem krassen "Verboten-Bildschirm" ab.
Sollten der User gefunden worden sein, muss er hofiert werden.
Damit hat der Boss soweit seinen Teil getan und gibt den Kelch an Doofie weiter.
Der hat von allem nichts mitbekommen und kapiert ohnehin nicht. Was er verstanden hat, war "Verboten-Bildschirm ausgeben"
..hier kann er frei entscheiden, je nach Lust und Laune, ob ein Warndreieck oder ein zarter Schriftzug "da war wohl was falsch".
Die etwas anspruchsvoller Aufgabe, wenn der User existiert.
Hier muss sich der View intensiv um die Ausgabe der Daten kümmern, wo kommt was hin. Was hat der Boss gesagt, was ich auf keinen Fall weiter Plappern darf, das darf ich nicht ausgeben.
Für arg doofe hat das Model sicherheitshalber Passwörter und andere sensible Daten aus der Rückgabe entfernt, damit wirklich keiner auf die Idee kommt damit noch Unsinn zu machen.

Damit hätten wir einen Run durch das System geschafft.

Nun zum Sinn, wenn ein Teil davon nicht schon klarer geworden ist.
Der Controller verteilt die Arbeit an seine Untergebenen. Wenn er noch einen Helfer für die Webseiten-Inhalte benötigt, dann ruft er sich das content-model und sagt,
diese Seite brauche ich , also ..fix her damit. Den Controller interessiert auch nicht, wie das jeweilige Model seine Daten beschafft, Hauptsache die werden zurückgegeben.

Das Model oder die diversen Models haben keine Ahnung was gerade los ist. Brauchen die auch nicht. Die Bekommen ne Ziffer und suchen in der Richtigen Schublade dannach.
Die haben die Ãœbersicht über das Lager holen die Teile heraus. Ohne Verpackung und klicki bunty. Nur die Teile!

Nun sollte die Gesamtleistung des Unternehmens MVC noch stimmen. Dafür ist der View zuständig. Er schnibbelt ein paar Bilder mit rein. Positioniert das so, dass Oma Trude die Seite noch lesen kann.
(der Boss gab noch den Wink, das Oma Trude noch mit windows xp unterwegs ist und der Monitor noch schlappe 800x 600 hat).

Die 3 Teile sind also nur bedingt von einander abhängig. Das proggrammiert sich jeder so wie er es braucht oder falls es eine Integration ist, wie es dort üblich ist.
Im Prinzip kann man das Model als Leiharbeiter ins Ausland, in eine andere Firma stecken. Er braucht nur geringe Zeit um Schraube Groß, Schraube klein als Befehl zu verstehen.
Wie so eine Schraube aussieht weis das Model ohnehin und findet sich schnell zurecht.

Mit dem View ist es ebenso. Den kann man auch weiterreichen. Das markanteste sind die Templates die man sich installiert und schon gehts los.
So ist das System relativ unabhängig von einzelnen Teilen und deren Ausprägungen.

... Zum Anfang sollte man sich das Dreiecks-Model aus dem Kopf schlagen, das ist zwar richtig, verwirrt aber nur. Das ist wie das Reste-Schraubenglas..Chaos.
Wichtig ist, dass das Model auschliesslich Daten beschafft und verarbeitet. Ohne jegliche Ausgabe von html!
Der View sollte in keinem Falle anfangen irgendwelche Berechnungen auszuführen. Installiert man sich auf seine Seite ein neues Template, ist beispielsweise die Abfrage nach dem letzten Besuch des User futsch.
Das wäre ein Disaster.

Ich denke hier hilft ganz einfaches Anfagen mit dem Programmieren. Keine tiefen Aufgaben, einfach nur das Mvc strukurieren. Den Controller die $_POST abfangen lassen und daraufhin
das richtige Model ansteuern. Ein paar kleine Models bauen Eins für die Datenbank, Eines welche die Query für die Useranfrage an das Datenbankmodel reicht. Ein Content-model.
Dann einen View der die Verschiedenen Login Zustände abbildet "eingeloggt, ausgeloggt, verboten". Um so ärmer die Teile sind um so leichter lässt sich das lernen und verstehen.

Erst wenn man es ein wenig verstanden hat und bissl Trockenübungen hatte, macht das richtig viel Spass...also viel Freude



gelöschter Benutzer
am 07.08.2012, 01:01 Uhr schrieb

Hey Roman,

ich glaub das validieren der Daten ist eher die Aufgabe des Controllers, bevor er es an das Model weiter gibt. Das Model selber speichert und lädt die Daten und bringt sie in eine passende Form bevor sie zurückgegeben werden, aber manipulieren tut nur der Controller.

Aber eine gute Erklärung :thumbup:

Den View kann man auch gut am Beispiel von Diagrammen erklären. Es gibt verschiedene Formen der Darstellung zB.: Kreis, Balken o. Netzdiagramme. Sie alle stellen die selben Daten dar nur in einer andere Form und genau das ist die Aufgabe des Views.


Schöne Grüße
Thomas


ptra
Avatar ptra
Designerin (Print & Web)
Content Meister (473 Beiträge)
am 07.08.2012, 08:26 Uhr schrieb ptra

Hallo Roman,

selten so gelacht. Danke. Der absolute Burner, deine anschaulichen Erklärungen. Aber damit kann ich was anfangen, man(n) sollte es nicht meinen. Grundsätzliche Frage: kriegt man diese Art Struktur-Konzept auch in die CMS rein, bzw. könnte man z.B. in Contao, Typo oder WP zur Zeit damit arbeiten oder müssen die erst dahingehend entwickelt werden?

Wenn ich das jetzt richtig verstanden habe, trennt man dann nämlich nicht mehr nur Content/Struktur (HTML) und Aussehen (CSS) sondern puzzelt eine Site mit MVC-OOP ganz anders zusammen.

Gruß. Petra


Gegen die Infamitäten des Lebens... (siehe Hermann Hesse) http://www.universoom.de

seitenreport
Avatar seitenreport
Inhaber
TYPO3 Senior Developer
Content Gott (1772 Beiträge)
am 07.08.2012, 08:50 Uhr schrieb seitenreport

Hallo Petra,

ptra schrieb:

[...] Grundsätzliche Frage: kriegt man diese Art Struktur-Konzept auch in die CMS rein, bzw. könnte man z.B. in Contao, Typo oder WP zur Zeit damit arbeiten oder müssen die erst dahingehend entwickelt werden?


Das Entwickeln nach MVC ist bei allen größeren CMS sogar ausdrücklich erwünscht (auch wenn es nicht in den Coding Guidelines steht), da es eine einheitliche Struktur darstellt, durch die andere Deinen Code viel schneller verstehen können.

Wenn Du Dir z.B. die großen Extensions ansiehst, wirst Du bermerken, dass diese fast alle nach MVC entwickelt wurden. (erkennbar z.B. daran, dass es die Ordner model, view, controller gibt).

ptra schrieb:

Wenn ich das jetzt richtig verstanden habe, trennt man dann nämlich nicht mehr nur Content/Struktur (HTML) und Aussehen (CSS) sondern puzzelt eine Site mit MVC-OOP ganz anders zusammen.


Ja, sobald Du Dich aber erst einmal daran gewöhnt hast, wirst Du sehen, dass mit MVC vieles leichter ist, da Du auf Anhieb weißt, welche PHP Dateien für welche Funktionen zuständig sind.

Anbei noch ein gutes Tutorial zum Entwickeln einer Joomla-Komponente nach MVC Modell:

docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_1



@Roman: Super Beitrag!

Beste Grüße,
Matthias


SEO Analyse und Website-Check mit Seitenreport

ptra
Avatar ptra
Designerin (Print & Web)
Content Meister (473 Beiträge)
am 07.08.2012, 20:06 Uhr schrieb ptra

Hallo Matthias,

Dank auch dir für Input. Das Joomla-Tut war sehr anschaulich. So langsam kann ich mir was unter MVC vorstellen.

In erster Linie geht´s um dynamische „Module“ die - einmal erstellt - immer wieder Verwendung finden können. Praktisch ein Kekslager (um bei Romans Terminologie zu bleiben), aus dem man sich bedienen kann, unabhängig vom verwendeten CM-System.

Gruß. Petra


Gegen die Infamitäten des Lebens... (siehe Hermann Hesse) http://www.universoom.de

romacron
JDev Xer
Content Gott (1224 Beiträge)
am 07.08.2012, 21:17 Uhr schrieb romacron

Hallo,

@Thomas ..ich glaube so habe ich das auch geschrieben? Womit mit wir auch beim persönlichen Geschmack sind. Controller ist klar, bei mir gibt es in jedem Falle ein extra Model welches mir die Requests ordentlich durchnudelt und auch gleich castet.

Wenn man es kapiert hat kann locker flockig durch die Sachen spazieren, der Code liest sich dann wie ne Zeitung oder nen Magazin. Selbes für Uml, kann nur der was mit anfangen, der weiß worum es geht und was es bedeutet.

@Petra, ja das ist im End-Effekt alles fein aufgeteilt, halt nur ohne den Brei Faktor.

Das Joomla tut, das ist gut, das hat man nach einer Woche und der ersten Komponente einigermaßen im Griff.

@* thx .... So Pitti-Platsch-Post gehen nur auf Seitenreport :thumbup:


  • 1


« zurück zu: Sonstige

Das Seitenreport Forum hat aktuell 5276 Themen und 36111 Beiträge.
Insgesamt sind 48364 Mitglieder registriert.