Ankündigung

Einklappen
Keine Ankündigung bisher.

Frage zur Realisierung über das MVC Pattern

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Frage zur Realisierung über das MVC Pattern

    Hallo Leute,

    ich habe mich die letzte Zeit mal mit MVC auseinandergesetzt und baue gerade ein Testprojekt, bevor es an das geplante Großprojekt geht.

    Ich habe für einen administrativen Bereich ein Dashboard geplant. Dieses wird über den DashboardController realisiert. Auf diesem Dashboard sollen nun Widgets angezeigt werden. Die Widgets selbst sind folgendermaßen realisiert:

    Erst die WidgetBaseClass, von dieser leiten sich die einzelnen Widgets ab. Zur Steuerung gibt es dann einen WidgetController um dem MVC Prinzip treu zu bleiben. Nun ist die Frage wie greife ich aber vom DashboardController auf den WidgetController zu?

    Klar ist, dass ich einen neuen Response brauche eigentlich, das könnte ich natürlich über verschiedene Ajax Calls lösen und so die entsprechenden Daten nachladen. Aber das finde ich eigentlich super unschön. Ich könnte natürlich auch innerhalb des DashboardController eine Instanz des WidgetController generieren und mir den gerenderten Output übergeben lassen, aber ist das nicht gegen das MVC Prinzip oder ist das völlig legitim?

    Vielen Dank schonmal für die Antworten

    Grüße


  • #2
    Was du beschreibst ist eine Erweiterung von MVC, HMVC (da gibt es hier im Forum auch einige Threads zu). Nutzt du denn ein Framework als MVC Stack oder eine Eigenentwicklung?
    @fschmengler - @fschmengler - @schmengler
    PHP Blog - Magento Entwicklung - CSS Ribbon Generator

    Kommentar


    • #3
      Kurze Antwort: MVC sieht diesen Fall nicht vor. > HMVC. Ansonsten spricht imho nichts dagegen, gerenderten Content in einen Hauptcontent einzubauen.
      --

      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


      --

      Kommentar


      • #4
        ich nutze doophp, fand das framework geil wegen seiner schlanken beschaffenheit aber stoße mittlerweile doch auf grenzen des ganzen teils. aber nunja, jetzt hab ich damit angefangen. HMVC ist doch das modular aufgebaute mvc. in wie weit kann mir das denn da behilflich sein? ich brauche doch trotz allem einen weiteren request?

        ist denn dieses vorhaben grundsätzlich ein falscher ansatz? wie realisiert man denn sowas, auch wenn ich das hmvc nutzen würde?

        danke

        Kommentar


        • #5
          Bitte erstmal selbst recherchieren. Inserate, Konzepte und Meinungsumfragen
          --

          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


          --

          Kommentar


          • #6
            Hallo ViperNeo,

            Zitat von ViperNeo Beitrag anzeigen
            HMVC ist doch das modular aufgebaute mvc. in wie weit kann mir das denn da behilflich sein? ich brauche doch trotz allem einen weiteren request?
            HMVC als Konzept hilft dir
            • Software-Module und GUI-Elemente sauberer zu trennen,
            • GUI-Elemente beliebig mit einander zu kombinieren, da das Interface für die Kombination für alle Elemente gleich ist (composite pattern) und
            • gleichartige oder immer wieder vorkommende Komponenten auszulagern und an den relevanten Stellen einzubauen.

            Sofern die Umsetzung sauber ist, brauchst du keine weiteren Requests, sondern die Abarbeitung findet innerhalb eines Requests statt.

            Zitat von ViperNeo Beitrag anzeigen
            ist denn dieses vorhaben grundsätzlich ein falscher ansatz? wie realisiert man denn sowas, auch wenn ich das hmvc nutzen würde?
            Der Ansatz, HMVC zu nutzen ist nicht unsaber, sondern nochmal um eine Stufe "intelligenter" als MVC. Was die Umsetzung angeht, so kannst du für jedes Widget eine eigenen MVC-Komponente erzeugen, die dann auf dem Dashboard statisch oder dynamisch zusammengesteckt werden. Du definierst also jeweils einen Controller, ein Model und eine GUI-Repräsentation des Widgets. Der Widget-Controller kann dann - da der Grundstock bzw. der Root-Knoten des HMVC-Baumes ebenfalls ein MVC-Element ist - auf das Model bzw. die Services des Dashboards zugreifen um generische Informationen (z.B. eingeloggten Benutzer) abfragen zu können.
            Vom Prinzip musst du dir überlegen, wie du die einzelnen Bereiche schneidest. Aus meiner Warte würde ich versuchen, in der Basis-Applikation zentrale Services (Usermanagement, Datenbank-Zugriff, Konfiguration, etc.) zur Verfügung zu stellen, damit das Widget sehr schnell entwickelbar ist und nur noch diese nutzen musst.

            Für die Umsetzung von Applikationen mit dem HMVC-Ansatz kann ich dir das APF ans Herz legen. Dort findest du eine zentrale Komponente für die Request-Verarbeitung, eine generische Baum-Definition und viele Tools, die dir die Arbeit damit erleichtern.

            Solltest du noch weitere Fragen zur Umsetzung haben, sag Bescheid.
            Viele Grüße,
            Dr.E.

            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            1. Think about software design before you start to write code!
            2. Discuss and review it together with experts!
            3. Choose good tools (-> Adventure PHP Framework (APF))!
            4. Write clean and reusable software only!
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

            Kommentar


            • #7
              also ich verwende das Kohana Framework, und habe dort auf meiner Startseite mehrere Subcontroller, Profil,Login,News usw..

              Der Hauptcontroller lädt mir mein gesamtes content

              Hauptcontroller
              https://github.com/BlackScorp/Legend...ller/index.php

              Main Template
              https://github.com/BlackScorp/Legend...s/template.php

              in dem View habe ich dann die Subcontroller aufgerufen mit
              PHP-Code:
               <?= Request::factory('helper/playnowbutton_show')->execute(); ?>
              (eigentlich sollte man sowas nicht machen da das Template eigentlich "dumm" sein soll, fand das aber persönlich bequemer, ist ne andere geschichte)

              Danach habe ich einen Haupt Subcontroller der mir die Nötigen informationen holt, wie zb den benutzer und seine rollen.

              Haupt Subcontroller
              https://github.com/BlackScorp/Legend...controller.php

              (Jetzt nicht direkt in diesem Script, aber im Anderen Projekt) Den Haupt Subcontroller habe ich außerdem gesperrt, damit man es nicht von URL direkt aufrufen kann, also damit nur mein Hauptcontroller die aufrufen kann.

              Helper Controller
              https://github.com/BlackScorp/Legend...ler/helper.php

              Dieser Controller erbt vom Haupt Subcontroller und die Methoden diesen Controllers können nicht direkt über URL aufgerufen werden. Wenn ich nun ein User Model im Hauptsubcontroller hätte, dann könnte ich in den actions noch bestimmen ob dieser aufgerufen werden dürfen oder nicht.

              Ich bin jetzt zwar kein Profi wie dr.e. aber anhand dieser Beispiele könntest du ja dann sehen was mit HMVC gemeint ist, im grunde ist es dass du in deinem MVC unter MVC's aufrufst.

              Hoffe ich konnte dir da ein wenig weiterhelfen.

              PS der code ist nur zur anschaung da, es ist gut möglich dass viele dort falsch ist:P

              MFG

              EDIT: oh sehe gerade dass ich auf einen 1 Monat alten thread geantwortet habe.. sorry
              apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp

              Kommentar


              • #8
                Subcontroller
                vs.
                PHP-Code:
                <?= Request::factory('helper/playnowbutton_show')->execute(); ?>
                !=
                HMVC
                Viele Grüße,
                Dr.E.

                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                1. Think about software design before you start to write code!
                2. Discuss and review it together with experts!
                3. Choose good tools (-> Adventure PHP Framework (APF))!
                4. Write clean and reusable software only!
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                Kommentar


                • #9
                  wieso? helper klasse extends subcontroller, eigentlich müsste halt das ergebnis dieses requests an das view über den main controller übergeben werden, und nicht direct im view aufgerufen werden
                  apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp

                  Kommentar


                  • #10
                    Ganz einfach: Helper brechen die hierarchische Struktur eines MVC-Baums (HMVC-Baum) und genügen nicht der Struktur desselben. Das ist wie Traits & Klassen - sie injizieren Funktionaliät "von der Seite".

                    Das macht auch ein
                    PHP-Code:
                    FooHelper extends SubController {} 
                    nicht besser. Weder aus Sicht des Namings noch konzeptionell.
                    Viele Grüße,
                    Dr.E.

                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                    1. Think about software design before you start to write code!
                    2. Discuss and review it together with experts!
                    3. Choose good tools (-> Adventure PHP Framework (APF))!
                    4. Write clean and reusable software only!
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                    Kommentar


                    • #11
                      aber mein Subcontroller und MainController erben so oder so vom Controller,
                      (Controller = Startpunkt, Controller_Template erbt vom Controller, Controller_Subcontroller erstb von COntroller, Controller_Index erbt vom Template, Controller Helper erbt von Subcontroller)
                      und darf denn ein HMVC Konstrukt keine 2 Hauptknoten besitzen?
                      apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp

                      Kommentar


                      • #12
                        Ich kann mich nur wiederholen: eine Vererbungsstruktur sagt nichts über die Laufzeit-Struktur und deren Güte aus. Ebenso ist eine Vererbungsstruktur kein HMVC. HMVC ist eine Anordnung von gleichartigen MVC-Einheiten in einer Baumstruktur. Diese werden jeweils gleich behandelt und folgen idealerweise dem Composite-Pattern.

                        Dieser Baum hat i.d.R. einen Root-Knoten die die komplette Resource repräsentiert. Setzt du HMVC konsequent um, benötigst du keine Helper, da die darin enthaltene Funktionalität sauber als wiederverwendbare Komponente des Baumes umgesetzt werden kann. Sofern dich das Thema tiefergehend interessiert, kannst du dir mal die Implementierung des APF (siehe Timing-Modell des Page-Controller) ansehen. Dort ist HMVC auf dem Template-first-Ansatz basierend umgesetzt.
                        Viele Grüße,
                        Dr.E.

                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                        1. Think about software design before you start to write code!
                        2. Discuss and review it together with experts!
                        3. Choose good tools (-> Adventure PHP Framework (APF))!
                        4. Write clean and reusable software only!
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                        Kommentar

                        Lädt...
                        X