Zitat von lottikarotti
Beitrag anzeigen
Ankündigung
Einklappen
Keine Ankündigung bisher.
Schichtenmodell in modernen Webanwendungen
Einklappen
Neue Werbung 2019
Einklappen
X
-
Gast
Ein Controller darf zu keinem Zeitpunkt direkt mit einem Template kommunizieren - bspw. indem er Änderungen am DOM vornimmt. Stattdessen stellt ein Controller einen konkreten Funktionsumfang bereit, an welchem sich die Templates, je nach Bedarf, frei bedienen können.
Kommentar
-
Ich denke, der Controller sollte eher das View mit Daten befüllen. Das View selbst fragt nichts. Oder?
Besonders, wenn man ein einheitliches Interface für verschiedene Ebenen aufbauen möchte (z.B. CGI Konsole) ist es ratsam, dass das View keinen Einfluss auf den konkreten Lauf der Applikation hat.
Kommentar
-
Zitat von gerhrgk Beitrag anzeigenIch denke, der Controller sollte eher das View mit Daten befüllen. Das View selbst fragt nichts. Oder?[IMG]http://www.facebook.com/favicon.ico[/IMG] [B][URL="http://www.fbhack.de"][COLOR="Blue"][U][SIZE="4"]fbhack.de[/SIZE][/U][/COLOR][/URL] [/B][SIZE="4"] - Das deutschsprachige Facebook Hack & HHVM Support Forum[/SIZE]
Kommentar
-
@Chriz
Irgendwie finde ich ist MVC da generell kaputt. Heißt es nicht eine Klasse sollte genau eine Aufgabe haben?
Eine konkrete ActionController-Klasse soll konkrete Action-Methoden für einen bestimmten Aufgabenbereich bereitstellen (wie jede andere Klasse auch). Dabei ist es egal ob es 10, 20, 50 oder 100 Methoden sind. Es sind so viele wie nötig. Wenn ein Taschenrechner nur 4 Rechenarten unterstützt dann sind es 4, bei zwanzig Rechenarten müssen es eben 20 sein. Darin sehe absolut keinen Verstoß gegen das Single-Responsibility-Prinzip.
vg
jack-
Kommentar
-
@lottikarotti
Die Architektur von AngularJS zielt im Speziellen darauf ab, Controller unabhängig von Templates zu entwickeln. Ein Controller darf zu keinem Zeitpunkt direkt mit einem Template kommunizieren - bspw. indem er Änderungen am DOM vornimmt.
Dieses Beispiel demonstriert, wie man beliebige Templates um einen Controller herum aufbauen kann. Das funktioniert in dieser Form auch nur, weil der Controller keinerlei Abhängigkeit zu den Templates aufweist.
Das macht den Controller extrem flexibel und jederzeit wiederverwendbar.
vg
jack-
Kommentar
-
Hallöchen,
Zitat von jack88 Beitrag anzeigenIch behaupte einfach mal, dass der UserController in Deinem Beispiel nicht nur mit dem Template kommuniziert, das DOM ändert, sondern sogar das Template auch noch initialisiert.
Zitat von jack88 Beitrag anzeigenNur weil die Abhängigkeiten in den Controller mittels DI dynamisch injiziert werden, bedeutet das nicht, daß es keine Abhängigkeiten gibt. Ist $scope etwa keine Abhängigkeit?
Zitat von jack88 Beitrag anzeigenDein Beispielcontroller ist komplett an seinen $scope (Ausführungskontext) gebunden und deshalb genauso wenig flexibel oder wiederverwendbar wie jeder andere Controller auch.
Viele Grüße,
lotti[SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]
Kommentar
-
Hallöchen
Das Model, hier $scope, ist quasi das Werkstück eines Controllers.
Die „Templates“ in Deinem Beispiel, sind im Grunde genommen, nichts anders als Einzelteile (Partials) einer einfachen Kundenverwaltung-View (user darstellen, user hinzufügen, user löschen). Genauso wie in MVC üblich beinhaltet der Usercontroller die Steuerungslogik dieser UserView. Der Controller ist hier genauso an den Funktionsumfang einer bestimmten View gebunden wie in jeder anderen MVC-Anwendung auch. Worin siehst Du hier überhaupt eine größere Flexibilität oder Wiederverwendbarkeit des Controllers?
Es gibt in diesem konkreten Fall sogar noch einen gravierenden Nachteil. Falls Du die drei Templates mal zusammen, also innerhalb einer View verwenden möchtest, dann werden drei unabhängige $scpoes/ViewModels erzeugt. Diese ViewModels kennen sich nicht und haben jeweils eine eigene Datenbasis, sie benutzen aber alle denselben Controller! Das bedeutet ganz konkret, daß z.B. das Löschen, oder das Hinzufügen eines Users keine Auswirkungen mehr auf die Darstellung in den anderen Bereichen, wie z.B. in der UserList haben wird. Damit wären dann die Vorteile des bidirektionalen Databindings leider wieder außer Gefecht gesetzt - und gerade das mach AngularJs doch aus
vg
jack-
Kommentar
-
Zuletzt geändert von lottikarotti; 02.05.2014, 09:45.Hallöchen,
Zitat von jack88 Beitrag anzeigenDer $scope ist bei angularjs kein Model im Sinne von MVC, sondern ein ViewModel. Dein Beispielcontroller kommuniziert also nur mit dem Datenmodel der View. Durch das bidirektionale Databinding zwischen der View und dem ViewModel ist es nicht mehr erforderlich direkt auf dem DOM zu operieren, der Entwickler muss sich nicht mehr selbst um die Synchronisation der View mit den ViewDaten kümmern. Das ist (verkürzt dargestellt) schon alles.
Zitat von jack88 Beitrag anzeigenDie „Templates“ in Deinem Beispiel, sind im Grunde genommen, nichts anders als Einzelteile (Partials) einer einfachen Kundenverwaltung-View (user darstellen, user hinzufügen, user löschen). Genauso wie in MVC üblich beinhaltet der Usercontroller die Steuerungslogik dieser UserView.
Zitat von jack88 Beitrag anzeigenDer Controller ist hier genauso an den Funktionsumfang einer bestimmten View gebunden wie in jeder anderen MVC-Anwendung auch.
Zitat von jack88 Beitrag anzeigenWorin siehst Du hier überhaupt eine größere Flexibilität oder Wiederverwendbarkeit des Controllers?
Zitat von jack88 Beitrag anzeigenEs gibt in diesem konkreten Fall sogar noch einen gravierenden Nachteil. Falls Du die drei Templates mal zusammen, also innerhalb einer View verwenden möchtest, dann werden drei unabhängige $scpoes/ViewModels erzeugt. Diese ViewModels kennen sich nicht und haben jeweils eine eigene Datenbasis, sie benutzen aber alle denselben Controller! Das bedeutet ganz konkret, daß z.B. das Löschen, oder das Hinzufügen eines Users keine Auswirkungen mehr auf die Darstellung in den anderen Bereichen, wie z.B. in der UserList haben wird. Damit wären dann die Vorteile des bidirektionalen Databindings leider wieder außer Gefecht gesetzt - und gerade das mach AngularJs doch aus
PS: Ich wollte nicht den Eindruck erwecken, als wäre die Architektur von AngularJS eine eierlegende Wollmilchsau Das Konzept ist für einen Anfänger allerdings sehr interessant und kann viel zum Verständnis von abstrakten Themen wie MVC, MVVM usw. beitragen.
Viele Grüße,
lotti[SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]
Kommentar
-
Also ist der Controller unabhängig vom View, auf Grund der $scope-Mechanik
Code:<ul data-ng-controller='UserController'> <li data-ng-repeat='benutzer in usres'>{{benutzer.username}} ({{benutzer.email}})</li> </ul>
Du kannst es auch gerne umgekehrt versuchen, lass die Templates so wie sie sind und ändere nur den Controller:
Code:... $scope.benutzerliste= [ {benutzername: 'foo', emailadresse: 'foo@bar.de'}, {benutzername: 'bar', emailadresse: 'bar@foo.de'} ];…
„weil der Controller keinerlei Abhängigkeit zu den Templates aufweist “?
Dass drei unterschiedliche Templates einen Controller verwenden können, verstehe ich bereits als Wiederverwendbarkeit.
Nach Deinem Verständnis erhöht sich die Wiederverwendbarkeit des Controllers mit jeder Komponente, die mit diesem Controller interagieren kann. Das würde im Umkehrschluss bedeuteten, daß ein maximal wiederverwendbarer Controller alle Komponenten bedienen müsste. Das hat nichts mit Wiederverwendbarkeit zu tun.
Es liegt in der Natur der Sache, daß ein konkreter Controller (konkrete View und konkretes Modell übrigens genauso) nicht bzw. nur sehr eingeschränkt wiederverwendbar ist.
Eine wiederverwendbare Softwarekomponente muss bis zu einem gewissen Grad generisch sein. Eine Funktion wie sum(zahl1, zahl2) ist generisch und sehr gut wiederverwendbar. Eine Funktion wie sumEinsPlusZwei() ist sehr spezifisch und daher nur sehr eingeschränkt/kaum wiederverwendbar.
Ein konkreter Controller ist viel zu spezifisch um wiederverwendbar zu sein. Andere Entwickler könnten Deinen Controller in Ihren Projekten nicht ohne Anpassungen einsetzen, es sei denn Sie würden exakt die gleiche Anwendung programmieren.
Das Konzept ist für einen Anfänger allerdings sehr interessant und kann viel zum Verständnis von abstrakten Themen wie MVC, MVVM usw. beitragen.
vg
jack-
Kommentar
-
Zitat von jack88 Beitrag anzeigen„Der Controller ist hier genauso an den Funktionsumfang einer bestimmten View gebunden wie in jeder anderen MVC-Anwendung auch. “
Kommentar
-
Trainmaster
Zitat von Okinez Beitrag anzeigendie Definition von MVC
Ansonsten kann ich aktuell zwei Artikel empfehlen: http://phpmagazin.de/artikel/Model-V...ndungen-171912 und http://phpmagazin.de/artikel/Was-nic...-Teil-2-171917
Kommentar
-
Wenn Du dieser Auffassung bist, solltest Du dir aber nochmal genauer die Definition von MVC ansehen.-
Kommentar
Kommentar