Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

1

22.11.2008, 23:58

Pattern-Frage zu Observer-Pattern, speziell MVC

Hi!

Ich habe da eine kleine Frage an unsere Pattern-Experten, da ich für folgendes keine konkreten Angaben zum Observer-Pattern (speziell MVC) gefunden habe.

Die Definition des MVC ist ja "plump" gesagt, folgende:

"Ein Model (Subject) beinhaltet mehrere Views (Observer), ein View hat einen Verweiß auf das Model selbst um die Daten des Models auszugeben. Ein Model kann zu mehreren Controllern verknüpft sein, Models selbst haben keine Verbindung zum Controller."

Die Frage ist jetzt: Da ein Model mehrere Views haben kann (1:mc), hat dann ein View eine c:1-Beziehung mit dem Model oder eine mc:1-Beziehung? Also kann ein View auch für mehrere Models benutzt werden oder nur für eines?

Das ist für mich aus der Definition des MVCs bzw. aus der des Observer-Patterns nicht ersichtlich. Ich habe bisher nur Implementierungen von Observer-Pattern gesehen, wo der Observer eine c:1-Beziehung mit dem Subject hatte. Ob dies nun aufgrund von für das Verständnis so gemacht wurde oder im Bezug auf die Definition weiß ich nicht, drum frage ich einfach mal. ;)

so long!
- unsigned long

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

2

23.11.2008, 00:28

Mal grundsätzlich, wenn du vom MVC-Pattern sprichst (und nicht vom MV-Pattern) hat die View GAR KEINEN Verweis auf das Model, sondern nur auf das Interface vom Controller, sonst wäre dieser ja überflüssig. Der Controller ist einerseits Fassade (eingeschränkt) des Model für die View, und gleichzeitig Listener vom Model.

Für jede View gibt es einen Controller der mit dem darunterliegenden Model interagiert. Es gibt keine direkte Verbindung zwischen Model und View, was ja auch der Sinn vom Controller ist. Vollständige Entkoppelung!

Ich persönlich habe jetzt noch nie davon gehört, dass ein Controller gleich mehere Models verwaltet, obwohl es Designpattern-mäßig nicht falsch wäre und auch sehr sauber lösbar sein sollte (Controller als Listener mehrerer Modelle). Demnach würde ich vermuten, dass das Möglich ist. Ob es dann allerdings noch ein REINES MVC-Pattern ist, bezweifle ich.
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Anonymous

unregistriert

3

23.11.2008, 00:30

Zitat von »"Black-Panther"«

Mal grundsätzlich, wenn du vom MVC-Pattern sprichst (und nicht vom MV-Pattern) hat die View GAR KEINEN Verweis auf das Model, sondern nur auf das Interface vom Controller, sonst wäre dieser ja überflüssig. Der Controller ist einerseits Fassade (eingeschränkt) des Model für die View, und gleichzeitig Listener vom Model.
Das klingt eher nach einem MVP nicht MVC ;)

Anyway. Ein MVC baut ja auf einem Observer auf und in einem Observer hat das ConcreteSubject (im MVC Model) eine Liste mit ConcreteObservers (Views) welche im Conrecte einen Verweiß auf das ConcreteSubject selbst haben.

Also hat das Model im MVC automatisch eine Liste von Views, diese wiederum Verweise auf das Model oder die Models.

Jedefalls verstehe ich so das UML:
Observer: http://de.wikipedia.org/w/index.php?title=Bild:Beobachter-pattern.png&filetimestamp=20080305110419
MVC: http://de.wikipedia.org/w/index.php?title=Bild:ModelViewControllerDiagram.svg&filetimestamp=20070407123840

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

4

23.11.2008, 01:41

Wenn ich mir das so anschaue, dann würd ich das gleich interpretieren wie du...

Wobei ich sagen muss, dass wir auf der Uni etwas anderes unter MVC-Pattern gelernt haben, und sich jenes, so wie oben beschrieben verhält.
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

5

23.11.2008, 09:29

Um ehrlich zu sein habe ich MVC bisher weniger als Pattern als ein Programmierkonzept gesehen. Pattern haben eine feste Struktur, aber ich denke die Idee (Trennung von Daten, Präsentation und Logik) hinter MVC ist viel zu flexibel, als, dass man sie in eine feste Struktur fassen sollte.

Also ich würde "Also kann ein View auch für mehrere Models benutzt werden oder nur für eines?" mit der Gegenfrage: "Muss die View (in deiner Implementierung) für mehrere Models genutzt werden können?" beantworten.
Beantwortet bloß nicht die Frage nach der Definition. Ich bin Montagabend wieder zu Hause, dann könnte ich mal im Buch Entwurfsmuster nachschlagen. Ich glaube dort ist eine Beispielimplementierung drin.

Anonymous

unregistriert

6

23.11.2008, 10:07

Black-Panther
Ah okay, dann hatten wir beide zwei verschiedene Vorstellungen des MVCs. ;-)

xardias
Benötigen für meinen derzeitigen Fall würde ich es nicht, da reicht eine Verbindung. Aber da ich eine "Art" Pattern-Lib mit abstrakten Klassen für meinen zukünftigen Gebrauch schreibe, kann man ja nie wissen was später mal kommt.

edit:
Jetzt wo ich mir gerade das UML des MVCs ansehe, fällt mir auf ich muss noch eine Verbindung zwischen View und Controller herstellen. Da jeder View ja eine andere Eingabeform haben kann (z. B. Shelleingabe, Edit-Felder, Buttons, usw.) müssen die dort eingegebenen Daten ja an den Controller gesendet werden, damit dieser die in das Model einträgt.

Was für ein gefrickel :lol:

7

23.11.2008, 10:08

Zitat von »"unsigned long"«



Also hat das Model im MVC automatisch eine Liste von Views, diese wiederum Verweise auf das Model oder die Models.


das model kennt defitiv nicht die Views. wozu auch?
ne view benutzt das model bloß, um an die daten zu kommen, für nichts weiter
ne view kann mehrere models haben , wobei das schlußendlich auch als ineinander integrierte mehrere MVC's angesehen werden kann. wenn du dich damit mal genauer beschäftigen willst, solltest du dir role modeling mal ansehen.

Anonymous

unregistriert

8

23.11.2008, 10:12

Zitat von »"WarMuuh!!"«

das model kennt defitiv nicht die Views. wozu auch?
Weil es auf dem Observer-Pattern aufbaut und dort das Subject all seine Observer kennt? Da Model ja von Subject erbt und View von Observer, kann ich nicht einfach die Implementierung des Observer-Patterns in Model "umstoßen"?

9

23.11.2008, 10:37

achso...dann kennst ja nur die abstrakte observer-klasse, nich die view ansich...imo schon n unterschied

btw gibts von observer ne multiple-subject variante, wo einfach das subject in notify mitgeschickt wird...

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

10

23.11.2008, 15:31

Wichtig ist nur, dass die Model auf KEINE einzige Methode der View zugreift (höchstens auf die des Listener, aber dann greift nicht das Model zu, sondern das Subject, welches halt zufällig auch Model ist!)! Das würde nämlich der Schichtenarchitektur wiedersprechen, und damit der Existenz des MVC-Patterns jedlichen Sinn nehmen ;)
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Werbeanzeige