Model View Controller



  • Hallo,

    hat schon mal einer das MVC Muster benutzt ? Also bei mir gibts immer eine View , dann eine Logik und dann eine Datenbankschicht.

    Die Logikschicht ist doch die Modellschicht. Aber controller brauchte ich noch nie.



  • Die Datenbank ist eine eigene Schicht und ist beim MVC Pattern nicht dabei. Die Datenbank wäre also eine zusätzliche Schicht. Bitte korrigiert mich wenn das falsch ist.



  • Wenn du dir den ganzen Tag nur noch Gedanken über die Begrifflichkeiten in deinem Schichtmodell machst und dich irgendwann fragst was die ganze Scheisse soll, dann hast du es verstanden ^^



  • Dieser Thread wurde von Moderator/in nman aus dem Forum Themen rund um die IT in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Nein, gewöhnlich ists es so, dass deine Logik eben im Controller steckt. Die Logik operiert auf Daten(dem Modell), welche wiederum persistiert werden (können). Der Controller erzeugt dann wiederum die View, die dem User präsentiert wird, damit dieser einen Button drücken kann, dessen Event wiederum der Controller verarbeitet usw.



  • Jetzt gibt das wenigstens Sinn. Die Logik steckt natürlich im Controller 🙂



  • Das Model kann schon auch Logik enthalten, vielleicht kommt daher auch die Verwirrung. z.B. könnte Validierung Teil des Models sein.



  • Lol ich hasse diesem Begriff Logik. Übersetzt heisst Logik doch Vernunft oder.
    Validierung ist doch nur eine Prüfung . Was hat das mit Logik zu tun.



  • Newbie68697 schrieb:

    Lol ich hasse diesem Begriff Logik. Übersetzt heisst Logik doch Vernunft oder.

    Eine Wortbedeutung ist durchaus Kontextabhängig, und Logik im IT-Bereich bezieht sich eher auf eine aktive Vorgehensweise, weniger nicht auf "Vernunft" (Auch wenn es durchaus vernünftig umgesetzt werden sollte ;p).

    Newbie68697 schrieb:

    Validierung ist doch nur eine Prüfung. Was hat das mit Logik zu tun.

    Auch eine Prüfung ist eine aktive Vorgehensweise, eine Programmlogik. Es wird aktiv etwas überprüft. Es gibt mehrere Ansätze von MVC und manche erlauben Logik (wie Validierungen) im Model, andere nicht.



  • Wohin die Logik gehört, ist nicht klar spezifiziert. Ich würde sie im Modell implementieren bzw. bei Datenbanken eine weitere Schicht hinzufügen.

    http://de.wikipedia.org/wiki/Model_View_Controller#Gesch.C3.A4ftslogik



  • Jede Schicht hat ihre eigene "Logik".
    Die View macht ja auch mehr als nur dumm Daten anzuzeigen - sie präsentiert die Daten. Dazu hat sie natürlich keine Logik die diese Daten beschafft aber eben sehr wohl Logik diese anzuzeigen und zu verknüpfen. etc.



  • Hier mal dazu, welche Rolle ein Controller spielt, die View oder Model nicht übernehmen sollten:

    Bei einem Model mit View aber ohne Controller stellt sich mir halt die Frage, wo man das Event-Handling macht. Nehmen wir beispielsweise ein Balkendiagramm als View, bei dem ich beim Klick auf einen Balken etwas Bestimmtes anzeigen möchte.

    Jetzt brauchen wir den Eventhandler für Klick auf Balken. Das ergibt im Model natürlich gar keinen Sinn. Im View finde ich es auch unangebracht, denn je nach Einsatz des Balkendiagramms wollen wir ggf. unterschiedlich reagieren.

    In QT z.B. sind View und Controller verknüpft. Da muss man dann entweder künstlich noch eine Extraklasse basteln oder vom View ableiten. Ersteres ist dann doch wieder irgendwie MVC, weil die Extraklasse den Part vom Controller übernimmt. Und letzteres ist hässlich, weil man eine eigentliche kennt-Beziehung zu einer ist-ein-Beziehung macht. Wenn ein Controller mehrere Views kontrolliert, müsste er von mehreren Klassen erben.

    Das führt zu einer zweiten Rolle vom Controller, die ein View kaum übernehmen kann. Wenn auf eine Aktion mehrere Views gleichzeitig geupdated werden, dann sollte das im Controller passieren. Das Model interessiert sich nicht für die Darstellung oder für Events, welche die Oberfläche betreffen. Und die Views sollten sich untereinander natürlich nicht kennen. Ein einfaches Beispiel ist, wenn man Daten einerseits als Tabelle anzeigt und zweitens in einem Diagramm darstellt.


Anmelden zum Antworten