Ankündigung

Einklappen
Keine Ankündigung bisher.

Architektur einer Verwaltungssoftware

Einklappen

Neue Werbung 2019

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

  • #16
    Was spricht eigentlich dagegen, einfach das gute, alte und bewährte MVC-Paradigma zu nutzen?
    Würde in meinen Augen viel Ärger ersparen und auch die Programmierung um einiges einfacher machen.

    PHP-Code:
        public function getTitle() {

          if(
    $this->modul_title != '') {
            return 
    $this->modul_title;
          }

        }

        
        function 
    getContent() {
          return 
    $this->modul_obj->output();
        }
      } 
    Und soetwas gehört sich sowieso verboten. Ich nehme mal an, darüber willst du HTML ausgeben? - Ich würde dir empfehlen, dir eine kleine MVC-Umgebung aufzubauen. Damit du das Rad nicht neu erfinden musst, würde ich an deiner Stelle für die Models Propel und für die Views z.B. Smarty nutzen. Wenn du eine richtig professionelle Lösung suchst, dann freunde dich mit CakePHP, Symfonie oder dem ZendFramework an.

    Kommentar


    • #17
      Hallo Mano,

      Das APF habe ich mir auch heruntergeladen und bereits etwas im Code gestöbert. Allerdings wird eine kleinere Lösung für mich angebrachter sein.
      Das ist alleine deine Entscheidung. Ein Framework wie das APF - vor allem hinsichtlich der HMVC-Implementierung - helfen wir aber die Lösung ein wenig effizienter zu gestalten.

      1. Da die Klasse "modul" nicht weiß welche Aktionen die Klasse "address" besetzt wird die Aktion erst in dieser ausgefiltert
      Das ist IMHO ein Design-Fehler, denn die Klasse "address" soll nicht alles tun. Wenn du das Modul als Ganzes betrachtest, ist eine Front-Controller-Action der Einstieg, der den Status des Moduls initialisiert. Du könntest auch initializer dazu sagen. Mehr sollte die Klasse, die diesen initializer implementiert nicht tun.

      1. Platzhalter mit Leben aus der Methode von "address" füllen
      2. Rückgabe der Methode an die Elternklasse "modul"
      Das würde ich nicht tun. Eine View-Ausgabe zu erzeugen ist nicht Aufgabe einer Action, die zugleich als initializer dient. Das sollte mindestens durch eine eigene Klasse und ein View-Template implementiert werden, sonst bist du ganz schnell bei uncle bob. Warum sollte ein Modul mit unterschiedlichen Aufgaben denn mit einer einizigen Klasse implementiert werden?

      Natürlich nehme ich gerne Dein Angebot an und freue mich über ein kleines Code-Beispiel. Dieses würde mir auch schemenhaft reichen, sodass ich dieses selbst verstehen und ohne fertiges APFramework umsetzen könnte. Danke schonmal!!
      Wie oben schon mal angedeutet ist ein Framework kein Ballast, sondern es hilft dir. Nutzt du die grüne Wiese, musst du mindestens das MVC/HMVC- und Front-Controller-Pattern selbst implementieren. Aus Zeitgründen würde ich das persönlich nicht tun. Aus diesem Grund kann ich dir gerne ein Code-Beispiel bauen, jedoch würde ich mir gerne vorbehalten das APF zu nutzen, denn dort ist das Einbinden eines Views und das Ausführen einer Front-Controller-Action sofort möglich. Ohne das Framework müsste ich erst einiges an Code produzieren, damit das Beispiel wirklich für deinen Anwendungsfall funktioniert. Falls das ok ist, baue ich dir mal ein Beispiel. Sag einfach kurz Bescheid.
      Viele Grüße,
      Dr.E.

      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      1. Think about software design [B]before[/B] you start to write code!
      2. Discuss and review it together with [B]experts[/B]!
      3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
      4. Write [I][B]clean and reusable[/B][/I] software only!
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      Kommentar


      • #18
        @DerApfel:
        Was spricht eigentlich dagegen, einfach das gute, alte und bewährte MVC-Paradigma zu nutzen? Würde in meinen Augen viel Ärger ersparen und auch die Programmierung um einiges einfacher machen.
        Das ist nicht so ganz richtig. Plain MVC nutzt dir hier nur bedingt, weil du für ein Modul ja noch einen Sub-View einbinden musst. Da braucht es - wenn du es sauber machen möchtest - schon HMVC. Falls du nicht HMVC nutzen möchtest, musst du dir hinsichtlich des oben beschriebenen Konzepts noch mit standardisierten View-Helpern umsetzen.

        Wenn du eine richtig professionelle Lösung suchst, dann freunde dich mit CakePHP, Symfonie oder dem ZendFramework an.
        Den kausalen Zusammenhang zu obiger Problemstellung verstehe ich nicht. Es geht nicht um eine Standard-Lösung für irgendeine Applikation, sondern eine Modul-Schnittstelle. Diese wirst du in keinen der genannten Produkten so finden - definitiv!
        Viele Grüße,
        Dr.E.

        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        1. Think about software design [B]before[/B] you start to write code!
        2. Discuss and review it together with [B]experts[/B]!
        3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
        4. Write [I][B]clean and reusable[/B][/I] software only!
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        Kommentar


        • #19
          @dr.e
          Ich persönlich finde diese Art der "modularen" Umsetzung bei kleineren Projekten wirklich unschön und sehe jetzt wirklich deinen Sinn darin, da es in meinen Augen ein absoluter Overkill ist.

          Wenn er nun pro "Modul" einen Controller anlegt, Views im Stile "controller_aktion.tpl" erstellt und mit einem globalen Basistemplate arbeitet, kommt er auch ans Ziel und es wird zu 99,9% kein uncle bob

          Kommentar


          • #20
            @DerApfel:
            Ich bin mir nicht sicher, ob wir vom gleichen sprechen. Mano möchte eine generische Schnittstelle schaffen, mit dem Module in seiner Applikation einfach hinzuzufügen sind und die von Dritten genutzt werden kann um die Applikation zu erweitern. In diesem Kontext sprechen wir nicht mehr über eine "kleine" Applikation, sondern von einem etwas komplexeren Konstrukt.

            Weiterhin sollten wir uns in der Diskussion von der starren URL-Struktur lösen, die von einigen Frameworks proklamiert wird (/modul/controller/action/...), denn diese nutzt dir für ein solches Konzept nur bedingt. Ferner benötigen wir für die Implementierung 1 Basis-Template mit einer variablen Anzahl an "Basis-Views" und den beiden Views des Moduls. Fackle ich nun die MVC-Logik in wiederum nur einer Klasse oder einer Klasse für das Haupt- und einen für das Modul ab bin ich immer noch bei einem moderated uncle bob-Konstrukt. Technisch ist das sicher möglich, aber ich möchte an dieser Stelle nochmals darauf hinweisen, dass wir hier im Software-Design-Forum sind und schöne Lösungen diskutieren wollen.
            Viele Grüße,
            Dr.E.

            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            1. Think about software design [B]before[/B] you start to write code!
            2. Discuss and review it together with [B]experts[/B]!
            3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
            4. Write [I][B]clean and reusable[/B][/I] software only!
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

            Kommentar


            • #21
              Hallo,
              zunächst bedanke ich mich für die wirklich interessannte Disskussion zum Thema und wünsche allen ein frohes und gesundes neues Jahr

              [...] Ohne das Framework müsste ich erst einiges an Code produzieren, damit das Beispiel wirklich für deinen Anwendungsfall funktioniert. Falls das ok ist, baue ich dir mal ein Beispiel. Sag einfach kurz Bescheid.
              Das ist sehr nett. Mir würde bestimmt schon eine schemenhafte Darstellung bzw. Erläuterung zu Deiner Idee hierzu reichen um mir dieses besser vorstellen zu können. Kein großes und umfangreiches Code-Beispiel...

              Ich persönlich finde diese Art der "modularen" Umsetzung bei kleineren Projekten wirklich unschön und sehe jetzt wirklich deinen Sinn darin, da es in meinen Augen ein absoluter Overkill ist.
              Unschön möchte ich nicht sagen. Es erfordert zunächst erstmal ein bisschen Aufwand, den ich gerne in kauf nehmen möchte, damit es hinterher besser flutscht
              www.webdeveloperfactory.de - Der Blog und Ratgeber für Webentwickler mit zahlreichen Informationen

              Kommentar


              • #22
                Beispiel mit MVC-Basis

                So, ich habe mich nun mal an die Arbeit gemacht und ein Beispiel für meinen Anwendungsfall zusammengeschrieben. Über eure Ideen und Verbesserungen bin ich sehr dankbar.

                PHP-Code:
                  class address extends modules {

                    function 
                __construct() {
                    
                      
                // irgendwas
                    
                    
                }
                  
                    function 
                beispielaction() {

                      
                // mach was ...
                    
                      
                $template = new template();
                      
                $template->assign('huhu''baba');

                      return 
                $template->show();
                      
                    }

                  }

                  class 
                template {
                  
                    
                // Eigenschaften

                    
                public function assign($key$value){  
                       
                $this->_[$key] = $value;  
                    }
                    
                    public function 
                show() {
                      
                // return: geparstes HTML
                    
                }    
                    
                    
                // weitere Methoden

                  
                }

                  class 
                controller {
                  
                    private 
                $modul;
                    private 
                $action;

                    public function 
                __construct() {

                      
                $this->modul = isset($_GET["modul"]) ? strtolower($_GET["modul"]) : "default";
                      
                $this->action = isset($_GET["action"]) ? strtolower($_GET["action"]) : "index";

                      
                // oder POST und GET gleichzeitig abfangen?!

                    
                }

                    public function 
                init() {
                    
                      if(
                file_exists(OPT_SERVER_PATH 'modules/' $modul '/.class_' $modul '.php')) {
                        require_once(
                OPT_SERVER_PATH 'modules/' $modul '/.class_' $modul '.php');
                      } else {
                        throw new 
                Exception('[controller->init()] Das Modul ' $modul ' existiert nicht.');
                      }

                    }
                    
                    public function 
                display() {

                      
                $this->init();

                      if(!
                class_exists($this->modul)) {
                        throw new 
                Exception('blabla');
                      }

                      
                $modul = new $this->modul;

                      if(
                in_array($this->actionget_class_methods($modul))){
                        return 
                $modul->$this->action();
                      } else{
                        throw new 
                Exception('blabla');
                      }

                    }

                  } 
                www.webdeveloperfactory.de - Der Blog und Ratgeber für Webentwickler mit zahlreichen Informationen

                Kommentar


                • #23
                  Hallo Mano,

                  unter http://media.adventure-php-framework...e-1.13-RC1.zip habe ich dir ein voll funktionsfähiges Beispiel getippt. Arbeitsaufwand ~25Min.

                  Hier die Details:
                  • Das Ausliefern der Applikation/Webseite läuft über einen Frontcontroller.
                  • Das Initialisieren eines Moduls übernimmt eine permanent beim Frontcontroller registrierte Action.
                  • Die Module sind in einer Datenbank-Tabelle definiert (Schema siehe mein vorletzter Post). In der setup.sql findet sich ein Script, mit dem du das in einer beliebigen Datenbank aufsetzen kannst.
                  • Die Rahmen-Applikation ist ein einfaches Template, das ein bischen Text und die Bereiche enthält, in die die Modul-Elemente eingebunden werden können.
                  • Als Beispiel habe ich ein News-Modul implementiert, das ein Menü zeichnet und Content ausgibt. Wird die NewsAction aufgerufen, gibt diese zusätzlich noch einen Text aus, da die Funktion des Moduls quasi nicht vorhanden ist - es geht ja mehr um das Einklinken als um die Funktion eines Moduls selbst.
                  • Alle relevanten Dateien findest du im Ordner APF/mano/.
                  • Ist kein Modul angesprochen, werden Default-Templates für Menü und Content ausgegeben.
                  • Die Datenbank-Konfiguration findest du unter APF/config/core/database/app-context/DEFAULT_connections.ini. Hier muss Benutzer/Passwort und Datenbank-Name noch angepasst werden.
                  • Um das News-Modul aufzurufen, kannst du einfach ?mod=news an die URL anhängen.
                  • Die Einbindung der vom Modul zu zeichnenden Elemente werden mit Hilfe zweier Taglibs eingebunden, die ihre Informationen aus einem View-Model (DynamicModulesModel) beziehen, das in der Frontcontroller-Action initialisiert wird.
                  • Die Implementierung basiert auf der aktuellen Version 1.13-RC1 des APF bzw. auf dem aktuellen Code im SVN (Code ist bis auf für dieses Beispiel unwesentliche Änderungen identisch).

                  Zur Installation, einfach ZIP entpacken, Datenbank-Tabelle erzeugen und Datenbank-Konfigurations-Datei anpassen. Sollte etwas nicht funktionieren, sag einfach Bescheid.

                  Sobald du den Code nachvollzogen hast, würde ich gerne mit der Diskussion fortsetzen, denn ein aktuelles Code-Beispiel ist zwar eine Weiterentwicklung gegenüber den ersten, jedoch fehlt der Kernpunkt: die Integration in eine (bestehende) Anwendung.
                  Viele Grüße,
                  Dr.E.

                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  1. Think about software design [B]before[/B] you start to write code!
                  2. Discuss and review it together with [B]experts[/B]!
                  3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
                  4. Write [I][B]clean and reusable[/B][/I] software only!
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                  Kommentar


                  • #24
                    Danke

                    Sobald du den Code nachvollzogen hast, würde ich gerne mit der Diskussion fortsetzen, denn ein aktuelles Code-Beispiel ist zwar eine Weiterentwicklung gegenüber den ersten, jedoch fehlt der Kernpunkt: die Integration in eine (bestehende) Anwendung.
                    Vielen Dank für Deine Mühe und Dein ausführliches Beispiel. Wirklich Spitze!

                    Ich denke, die Datei - ModulesBootstrapAction.php - ist neben dem Frontcontroller das Interessanteste. Dieses geht doch eigentlich aber in Richtung meines Controllers in meinem Beispiel über Deinem Beitrag, oder?

                    Statt ein "echo" direkt im Modul run() würde ich dieses gerne via return zurückliefern und an entsprechender Stelle dann erst ausgeben.

                    Das zugehörige View mit Assign zum Template (müsste|würde) ich allerdings in der Modulklasse "address" selber machen, da hier ein Template aus dem Modulordner geladen wird und im Controller die Eigenschaften ja garnicht vorhanden sind, oder ist das dumm?

                    Ich wäre Dir auch über eine Information zu meinem Beispielcode dankbar. #post569366
                    www.webdeveloperfactory.de - Der Blog und Ratgeber für Webentwickler mit zahlreichen Informationen

                    Kommentar


                    • #25
                      Hallo Mano,

                      Statt ein "echo" direkt im Modul run() würde ich dieses gerne via return zurückliefern und an entsprechender Stelle dann erst ausgeben.
                      Das echo ist nur dazu da um zu sehen, dass da eine Ausführung der NewsAction stattfindet. Das ist nicht zur Generierung der Ausgabe des Moduls gedacht. Hierfür sind die Views APF/mano/modules/news/pres/templates/navi.html und APF/mano/modules/news/pres/templates/content.html zuständig, die jeweils ihre eigenen Document-Controller (=MVC-Controller) haben können. Diese können dann auf die in der NewsAction generierten Informationen zurückgreifen oder ihre eigenen Inhalte - woher auch immer - beziehen. Ich denke, ich sollte den Code des Moduls doch ein wenig ausformulieren, damit du die Idee noch eindeutiger siehst.
                      Ich denke, die Datei - ModulesBootstrapAction.php - ist neben dem Frontcontroller das Interessanteste. Dieses geht doch eigentlich aber in Richtung meines Controllers in meinem Beispiel über Deinem Beitrag, oder?
                      Die Action-Datei ist sicher das Herz-Stück. Aber: dein Controller geht davon aus, auch für die Erzeugung des Content zuständig zu sein. Das ist meiner Ansicht nach nicht so ideal, da du dadurch die Flexibilität im Aufbau des kompletten Views der Applikation einschränkst. Du musst dann wieder überlegen, wie das Timing des Renderings zu handhaben ist, weil der Controller direkt Content zurück gibt und wenn sich deine Basis-Applikation ändert, ändert sich auch dein Modul-Mechanismus. Mit dem von mir skizzierten Ansatz kann das nicht passieren, denn die View-Logik wird direkt in die View-Logik der Applikation über das Applikations-View-Model injiziert und damit passieren die gleichartigen Dinge (Business-Logik, View-Logik) für Modul und Applikation zur jeweils selben Zeit.

                      Das zugehörige View mit Assign zum Template (müsste|würde) ich allerdings in der Modulklasse "address" selber machen, da hier ein Template aus dem Modulordner geladen wird und im Controller die Eigenschaften ja garnicht vorhanden sind, oder ist das dumm?
                      Siehe oben: aus meiner Sicht ist das nicht gut gelöst.

                      Ich wäre Dir auch über eine Information zu meinem Beispielcode dankbar. #post569366
                      Hier fehlt mir genau der Kernpunkt: die Einbindung/Verbindung mit dem View-Konstrukt der eigentlichen Applikation. Standalone formuliert ist das sicher ok, jedoch bringt dir das bei der Forderung einer generischen Modul-Schnittstelle nichts - es fehlt die Integration.

                      In meinem Beispiel ist die Integration durch die Evaluierung der notwendigen Informationen vor dem Aufbau des Views bzw. der GUI und der Nutzung dieser dynamischen Informationen zum Zeitpunkt des Aufbaus der UI gegeben. Damit kannst du das Modul in deine Applikations-Struktur injizieren wie eine Abhängigkeit bei einem DI-Prinzip.

                      Ich werde die Tage mal den Code des News-Moduls etwas ausformulieren um dir ein besseres Gefühl zu geben, welche Komplexität mit dieser Vorgehensweise (und der HMVC-Implementierung des APF) tatsächlich möglich ist. Ich denke, das hilft dir für's Verständnis definitiv noch mehr weiter.
                      Viele Grüße,
                      Dr.E.

                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                      1. Think about software design [B]before[/B] you start to write code!
                      2. Discuss and review it together with [B]experts[/B]!
                      3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
                      4. Write [I][B]clean and reusable[/B][/I] software only!
                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                      Kommentar


                      • #26
                        Das echo ist nur dazu da um zu sehen, dass da eine Ausführung der NewsAction stattfindet.
                        Okay, super.

                        Siehe oben: aus meiner Sicht ist das nicht gut gelöst.
                        Um meine komische Lösungsweise zu verstehen: In meiner Modulklasse "address" habe ich beispielsweise für die List_Action() ein anderes Template wie für Edit_Action(). Dieses ist grundsätzlich bei allen Modulen identisch, dass hier evtl. für die Aktionen unterschiedliche Templates vorliegen.

                        Wenn diese Besonderheit nicht vorhanden wäre, würde ich natürlich das View erst im Controller verarbeiten lassen.

                        Hier fehlt mir genau der Kernpunkt: die Einbindung/Verbindung mit dem View-Konstrukt der eigentlichen Applikation. Standalone formuliert ist das sicher ok, jedoch bringt dir das bei der Forderung einer generischen Modul-Schnittstelle nichts - es fehlt die Integration.
                        Wie könnte ich dieses in meinem Beispiel nach den oben genannten Infos umsetzen?
                        www.webdeveloperfactory.de - Der Blog und Ratgeber für Webentwickler mit zahlreichen Informationen

                        Kommentar


                        • #27
                          Hallo Mano,

                          ich habe das Paket (Link siehe oben) um eine Dummy-Implementierung für das Anlegen von News-Items ergänzt (Arbeitsaufwand: ~15Min) . Hinzugekommen sind:
                          • Links in der navi.html um den "Sub-View" des Moduls anzusteuern.
                          • Template-Einbindung in content.html des Moduls um den Sub-View einzubinden.
                          • Neues Template für den create-"Sub-View" und ein zuständiger Controller, der das darin definierte Formular ausgibt.

                          Wie du an diesem Code erkennen kannst ist der Mechanismus zum Einbinden weiterer Elemente (Sub-Views, ...) immer identisch. Das macht es in meinen Augen sehr einfach, den Code von Modulen an die entsprechenden Stellen zu inkludieren ohne für jeden Anwendungsfall eigenen Code produzieren zu müssen.

                          Solltest du Fragen zu den einzelnen Code-Teilen haben, sag Bescheid.

                          Um meine komische Lösungsweise zu verstehen: In meiner Modulklasse "address" habe ich beispielsweise für die List_Action() ein anderes Template wie für Edit_Action(). Dieses ist grundsätzlich bei allen Modulen identisch, dass hier evtl. für die Aktionen unterschiedliche Templates vorliegen.
                          Das ändert nichts an meiner Aussage zum Timing und zur Integration.

                          Wie könnte ich dieses in meinem Beispiel nach den oben genannten Infos umsetzen?
                          Das ist genau der springende Punkt! Einige Posts zuvor hatte ich irgendwann geschrieben, dass das ohne vernünftigen Infrastruktur-Code nicht ohne weiteres möglich ist. Genau an diesem Punkt stehst du nun. Du hast zwar eine Idee, aber die Integration und Verarbeitung der Code-Teile ist nur ein loses Gewerk, keine zusammenhängende Lösung. Letztere habe ich dir mit meinem Beispiel demonstriert.

                          Dazu braucht es eine Struktur, die es zulässt, eigene Elemente und Views über eine Komponente zusammenzuführen, die das Management übernimmt und auf die Struktur der Elemente (z.B. Hierarchie) eingeht. Mit dem APF wird das durch eine Composite-Struktur von Document-Instanzen erreichen (HMVC), die über den Page-Controller verwaltet werden und selbst jeweils einen MVC-Controller haben können. Davor wird der Front-Controller zum Aufbau der Business-Schicht - oder Business-Schicht-nahen Komponenten - genutzt. Letzteren habe ich im Beispiel dazu genutzt um die Action des Moduls auszuführen, so dass das Modul in der Lage ist, einen Applikations-Status zu erzeugen, der in beiden Views nutzbar ist. Das ist bei der Erzeugung der News aktuell (noch) nicht notwendig, kann aber bei komplexeren Anforderungen wichtig werden.

                          Die Struktur kann man sicher mit anderen Produkten (z.B. ZF, CI, CP, ...) auch herstellen, der Vorteil der aufgezeigten Lösung ist meiner Ansicht nach jedoch, dass du die Abhängigkeiten der GUI-Struktur von einer dafür vorgesehenen Komponente abgenommen wird und du diese nicht selbst steuern und verwalten musst.

                          Um es zusammenzufassen: dein Code beschreibt aktuell nur schemenhaft das "Interface" eines Moduls, der Aufwand um daraus auf der grünen Wiese eine genersiche Integration in eine Anwendung zu schaffen ist deutlich zu groß als dass ich diesen diskutieren möchte. Warum? Wir müssten uns mit dem MVC/HMVC, Page-Controller, Front-Controller, ...-Pattern auseinander setzen und dafür jeweils generisch nutzbare Implementierungen schaffen.
                          Viele Grüße,
                          Dr.E.

                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                          1. Think about software design [B]before[/B] you start to write code!
                          2. Discuss and review it together with [B]experts[/B]!
                          3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
                          4. Write [I][B]clean and reusable[/B][/I] software only!
                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                          Kommentar


                          • #28
                            Hallo,
                            nochmals vielen Dank für die Dummy-Implementierung.

                            Die Struktur kann man sicher mit anderen Produkten (z.B. ZF, CI, CP, ...) auch herstellen, der Vorteil der aufgezeigten Lösung ist meiner Ansicht nach jedoch, dass du die Abhängigkeiten der GUI-Struktur von einer dafür vorgesehenen Komponente abgenommen wird und du diese nicht selbst steuern und verwalten musst.
                            Wenn jedoch nun ein externer ein Modul für meinen Fall entwickelt, müsste er sich nicht zwingend an die Struktur halten, den auch ohne Template würde eine Ausgabe am System möglich sein... Viele Wege führen halt nach Rom, ob die kürzer oder besser sind lässt sich streiten ...

                            Um es zusammenzufassen: dein Code beschreibt aktuell nur schemenhaft das "Interface" eines Moduls, der Aufwand um daraus auf der grünen Wiese eine genersiche Integration in eine Anwendung zu schaffen ist deutlich zu groß als dass ich diesen diskutieren möchte. Warum? Wir müssten uns mit dem MVC/HMVC, Page-Controller, Front-Controller, ...-Pattern auseinander setzen und dafür jeweils generisch nutzbare Implementierungen schaffen.
                            Das Beispiel mit dem APF ist wirklich anschaulich und gut. Ich bin allerdings der Meinung, mir eine eigene Struktur zu schaffen, in der ich mich wohl fühle. Dieses geht Dir hinsichtlich des APF sicherlich genau so. Was ich damit sagen möchte: Jeder hat seinen eigenen Programmierstiel und dadurch ist es meiner Ansicht nach nicht gerade einfach ein bestehendes Konstukt zu nehmen um dieses für sich zu erweitern. Dennnoch hat mir Dein Beispiel einiges hinsichtlich MVC näher gebracht. Außerdem finde ich eine komplett 100% durchgängige Nutzung von MVC im Code für eine einheitliche Struktur sehr sinnvoll. Einen großen Nachteil finde ich jedoch, dass sich dadurch die Dateistruktur durch zahlreiche Dateien für weitere Controller einfach nur aufblääääht.

                            Für mich stellen sich noch folgende Fragen:
                            1. Wenn es nach MVC geht, müsste ich dann dasTemplate bereits im Controller auswählen?
                            2. Wenn es nach MVC geht, müsste ich für meine Subviews einen eigenen Controller haben bzw. pro Modul ein einen Controller? (PageController und ModulController)
                            3. Wie könnte ich mein Beispiel verbessern?
                            www.webdeveloperfactory.de - Der Blog und Ratgeber für Webentwickler mit zahlreichen Informationen

                            Kommentar


                            • #29
                              Hallo Mano,

                              Ich bin allerdings der Meinung, mir eine eigene Struktur zu schaffen, in der ich mich wohl fühle. Dieses geht Dir hinsichtlich des APF sicherlich genau so.
                              Wenn du der Meinung bist, gerne. Jedoch kann ich den zweiten Satz definitiv nicht unterschreiben. Und das nicht, weil ich dem APF verschrieben bin, sondern ich für eine derartige Lösung immer auf ein fertiges Produkt zurückgreifen würde. Infrastruktur-Code zu schreiben erhöht den Aufwand innerhalb eines Projektes deutlich und verdonnert dich dazu, den eigenen, wiederverwendbaren und wartbaren Code zu schreiben und zu warten. Hierzu braucht es aber nicht nur Zeit, sondern auch sehr viel Erfahrung.

                              Ich möchte dir beides nicht absprechen, doch ich habe bereits einige Diskussionen hier im Forum verfolgt, in denen der Thread-Ersteller sich Informationen über eigenen Infrastruktur-Code besorgen und dann implementieren wollte. Leider habe ich bisher nie ein brauchbares und vor allem fertiges Ergebnis gesehen. Um den für das Beispiel genutzten Code zu schreiben würde ich aus dem Bauch heraus ein halbes Jahr veranschlagen. Wenn das dein Projekt verträgt, lasse ich mich gerne vom Gegenteil überzeugen.

                              Einen großen Nachteil finde ich jedoch, dass sich dadurch die Dateistruktur durch zahlreiche Dateien für weitere Controller einfach nur aufblääääht.
                              Diesen Einwand verstehe ich nicht. Jede Datei hat hinsichtlich ihres Ablage-Ortes eine definierte Bedeutung. Gerade die fehlende Segmentierung in mehrere Dateien wurde ja bisher im Thread immer als Nachteil genannt.

                              1. Wenn es nach MVC geht, müsste ich dann das Template bereits im Controller auswählen?
                              Warum im Controller? Die Einbindung des Moduls sollte IMHO schon vorher passieren, da du ja zwei (oder vielleicht auch mal mehr) Views des Moduls bedienen können musst.

                              2. Wenn es nach MVC geht, müsste ich für meine Subviews einen eigenen Controller haben?
                              In MVC gibt es keine Sub-Views. Hierzu brauchst du ein hierarchisches MVC-Modell.

                              3. Wie könnte ich mein Beispiel verbessern?
                              Eine für mich persönlich flexiblere Lösung habe ich dir aufgezeigt.
                              Viele Grüße,
                              Dr.E.

                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                              1. Think about software design [B]before[/B] you start to write code!
                              2. Discuss and review it together with [B]experts[/B]!
                              3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
                              4. Write [I][B]clean and reusable[/B][/I] software only!
                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                              Kommentar


                              • #30
                                Warum im Controller? Die Einbindung des Moduls sollte IMHO schon vorher passieren, da du ja zwei (oder vielleicht auch mal mehr) Views des Moduls bedienen können musst.
                                Wenn dieses schon vorher geschieht, habe ich ja genau das was ich meine. Einen Basis-Controller und einen der für die Modulverarbeitung notwendig ist, oder? Jede Komponente in meinem Fall das Adressmodul ist genau nach der gleichen Logik aufgebaut. Dort lässt sich dann eine address_controller / address_view / address_model wiederfinden?!

                                Ich möchte dir beides nicht absprechen, doch ich habe bereits einige Diskussionen hier im Forum verfolgt, in denen der Thread-Ersteller sich Informationen über eigenen Infrastruktur-Code besorgen und dann implementieren wollte. Leider habe ich bisher nie ein brauchbares und vor allem fertiges Ergebnis gesehen. Um den für das Beispiel genutzten Code zu schreiben würde ich aus dem Bauch heraus ein halbes Jahr veranschlagen. Wenn das dein Projekt verträgt, lasse ich mich gerne vom Gegenteil überzeugen.
                                Mein Projektbeispiel läuft bereits schon einige Jahre mit Erfolg. Natürlich sind in dieser Zeit die Möglichkeiten der objektorientierten Programmierung gewachsen und deutlich besser geworden. Aus diesem Grund bin ich schon seit geraumer Zeit dabei mein vorhandenes Konstukt zu verbessern und wohlmöglich auf das MVC hinzuarbeiten. Dieses Thema hatte ich gestartet um herauszufinden, welche Lösungsansätze ihr bereits für individuelle Projektlösungen bevorzugt bzw. einsetzt.

                                Ich habe mir in dieser Zeit immer genau überlegt bzw. geprüft, ob und wie ich fertige Lösungen einzusetzen habe. Spontan irgendwelche fertigen Entwicklungen einsetzen um schnell ein Ziel zu erreichen - davon bin ich leider kein Freund.

                                Deine Beispiele finde ich anschaulich und deutlich informativ und hat mich sicherlich auch wirklich weiter gebracht. Alle anderen haben die Disskussion bereits aufgeben
                                www.webdeveloperfactory.de - Der Blog und Ratgeber für Webentwickler mit zahlreichen Informationen

                                Kommentar

                                Lädt...
                                X