MB: Webseiten Artikel & Gästebuch einträge mit Factory Pattern?

Moin Copmmunity,

zu der Frage muss ich nicht viel sagen.

Ich will ein auf einer Seit einen Index mit Artikeln programmieren. Jenachdem wie viele da sind könnte man das doch mit Fatoris machen. Genau so wie mit Einträgen im Gäste buch oder?

vlg MB

  1. Hi,

    zu der Frage muss ich nicht viel sagen.

    Doch!

    1. Hi,

      Zu der Frage muss ich nicht viel sagen.

      Doch!

      Nö, im zweiten Absatz stehts genauer, jedoch habe ich nicht explizit drauf hingewiesen eher implizit. Es sei denn da tauchen noch Fragen zu meiner auf. Dann beantworte ich sie gern.

      vlg MB

      PS.: Eigentlich kann ich den ersten Absatz streichen. Sry.

      1. Hallo MB,

        ich bin genauso ratlos wie kackb00n. Ich hab mir zwar irgendwann mal einen Alias Mailaccount namens Lewis Alton gemacht, aber mein Laran ist seitdem ganz schön eingerostet.

        Welche Auskunft suchst Du eigentlich? Ob deine Idee von "Factory Pattern" und die Definition der Gang of Four die gleiche ist? Ob das Factory-Pattern (im GoF-Sinn) anwendbar ist? Wie das Factory-Pattern im konkreten Fall angewendet wird?

        Oder redest Du vielleicht eher von Templates?

        Rolf

        --
        Dosen sind silbern
        1. Hallo,

          Oder redest Du vielleicht eher von Templates?

          Eigentlich redet, äh schreibt er von Fatoris, aber da hab ich absolut keine Ahnung von.

          Gruß
          Kalk

          1. Hallo Kalk,

            Oder redest Du vielleicht eher von Templates?

            Eigentlich redet, äh schreibt er von Fatoris, aber da hab ich absolut keine Ahnung von.

            was sind Fatories?

            vlg MB

            1. Hi,

              was sind Fatories?

              Guck mal in Dein erstes Posting in diesem Thread - Du bist derjenige, der "Fatoris" ins Spiel gebracht hat.

              Also solltest Du doch wissen, was das ist …

              cu,
              Andreas a/k/a MudGuard

              1. Hi,

                was sind Fatories?

                Guck mal in Dein erstes Posting in diesem Thread - Du bist derjenige, der "Fatoris" ins Spiel gebracht hat.

                Nein das habe ich nicht, ich habe das Factory Pattern erwähnt. Fatori kenne ich immer noch nicht.

                vlg

            2. Hi Kalk,

              meints du Factory Pattern und hast sich einfach verschrieben? Dann wäre Das geklärt und sorry Kalk. Bin eben Begriffsstützig. Icjh raffe viele Dinge der Zwischenmenschlichen Interaktion nich.

              vlg MB

        2. Hi RolfB,

          Ok, da weis ich jetzt auch nicht weiter, entwerder is n Missverständnis, wie üblich bei mir ^^, oder ich hab unbewusst in eine tiefe Kiste gegriffen. Sry KLackb00n. Ja ich meine Factories ala GoF. Kann man das nicht einfach mit Templates Kombinieren? Oder ist dieses Pattern nich für Templates gemacht und wird zweckentfremdet?

          vlg MB

          1. Hallo,

            nur mal so aus Neugierde und nicht böse gemeint, was ist deine Muttersprache?

            Gruss
            Henry

            1. Hallo Henry,

              was hilft Dir die Antwort? Wenn er "deutsch" sagt - willst Du dann über seine Rechtschreibung diskutieren? Das ist vermintes Gelände. Geh einfach davon aus, dass er so gut schreibt wie es ihm möglich ist und die Fehler nicht vermeiden kann.

              Rolf

              --
              Dosen sind silbern
              1. Weiß nicht was an meiner Frage so schlimm sein soll, dass du für deine Antwort Punkte erhältst. Die Antwort von Matthias war zumindest erhellend und lehrreich.

                Gruss
                Henry

                1. und das wusstes du auch nicht. Ist ja auch nicht schlimm. fragen kann man gern ;-).

                2. Hallo Henry,

                  seh ich auch so, die Punkte hat Matthias verdient, der hat den Link ausgegraben.

                  Rolf

                  --
                  Dosen sind silbern
                  1. Hallo Rolf,

                    seh ich auch so, die Punkte hat Matthias verdient, der hat den Link ausgegraben.

                    wow, damit hätte ich nicht gerechnet, weil soviel Objektivität (wenn es einen selber betrifft) doch eher ein seltenes Gut in Foren ist. Dafür würde ich dir jetzt gerne einen Punkt geben, wenn ich dürfte, Respekt.

                    Gruss
                    Henry

                    1. Hallo Henry,

                      Dafür würde ich dir jetzt gerne einen Punkt geben, wenn ich dürfte, Respekt.

                      Dann solltest du dich vielleicht mal registrieren 😀...

                      Gruß
                      Julius

                      1. Hallo Julius,

                        Dann solltest du dich vielleicht mal registrieren 😀...

                        habe ich deshalb auch extra gemacht, leider muss ich aber wohl erst Punkte haben um welche zu vergeben. Muss mich jetzt sowieso erst mal schlau machen wie das hier alles so funktioniert.

                        Gruss
                        Henry

                        1. Hallo Henry,

                          Dann solltest du dich vielleicht mal registrieren 😀...

                          habe ich deshalb auch extra gemacht, leider muss ich aber wohl erst Punkte haben um welche zu vergeben. Muss mich jetzt sowieso erst mal schlau machen wie das hier alles so funktioniert.

                          Naja, die Einstiegshürde von 50 Punkten ist ja nicht sonderlich hoch. Die habe ich absichtlich so gewählt um zu verhindern, dass jemand einen Bot schreibt um irgendwelche Beiträge 23424234 mal zu bewerten.

                          LG,
                          CK

            2. Hallo Henry,

              nur mal so aus Neugierde und nicht böse gemeint, was ist deine Muttersprache?

              https://forum.selfhtml.org/m1660154 ff.

              Bis demnächst
              Matthias

              --
              Rosen sind rot.
              1. Hallo Matthias,

                danke für den Link. Hatte mich schon gewundert und mir einige Beiträge vom MB angeschaut. Da diese teilweise wirken, wie vom Google-Übersetzer, hätte ich eher auf Fremdsprache getippt.

                Faszinierend, wusste nicht, dass sich Sprachstörungen auch in schriftlicher Weise widerspiegeln können, wieder was gelernt.

                Gruss
                Henry

            3. Hi Henry,

              ist beantwotet worden von Matthias - danke dafür Matthias. Sonst hätte ich dir kurz und bündig gesagt Henry ;-).

              vlg MB

          2. Hallo MB,

            die Idee des Factory-Patterns ist, dass Du eine Familie von Klassen hast, die alle eine Methode CreateFooObject zur Erzeugung eines Objekts bereitstellen. Diese Methode ist entweder auf einer gemeinsamen Superklasse BaseFactory oder auf einem gemeinsam implementierten Interface IFactory definiert (alle Namen willkürlich gewählt)

            Der NUTZER der Factory bekommt ein Objekt der Klasse BaseFactory bzw. IFactory, und weiß nicht, welche konkrete Implementierung er bekommen hat. Er ruft CreateFooObject auf, und bekommt ein Objekt. Welches genau, legt die Factory fest. Natürlich müssen alle Factories so gebaut sein, dass die Familie der erzeugten Foo-Objekte einen sinnvollen Satz gemeinsamer Eigenschaften haben.

            Ein Beispiel: Du schreibst einen Satz Factory-Klassen, die Dir ein Objekt mit Texten liefern. Du hast 3 Factories. Eine holt die Texte aus einer Datenbank, die andere aus einer XML-Datei, die dritte hat sie fest eingebaut. Dem Objekt, in dem Du später die Texte brauchst, gibst Du bei Erzeugung eine Instanz einer dieser Factories mit. Das Objekt weiß nur, dass es eine ITextFactory als Parameter bekommt, und dass dieses Objekt eine GetTextFormatter() Methode hat. Der TextFormatter ist ein Objekt mit Methoden, die Dir die Textbausteine liefern bzw. spezfische Aufbereitungen enthalten.

            D.h. eine Factory liefert Dir eine bestimmte Implementierung einer Basisklasse oder eines Interfaces. Ohne Factory-Pattern hättest Du eine EINZELNE Methode mit einem switch darin, der je nach konfiguriertem Szenario die eine oder andere Implementierung liefert. Das Factory-Pattern löst den Switch in Polymorphie auf.

            Sooo. Und jetzt zu Factory und deinen Artikeln. Du müsstest erstmal überlegen, ob Du unterschiedliche Artikeltypen hast, die unterschiedliche Aufbereitung brauchen. Oder ob Du vielleicht unterschiedliche Darstellungsarten hast, für die Du jeweils eine andere Klasse bereitstellen willst, die die Aufbereitung für die Darstellung übernimmt.

            Man angenommen, du hast Artikelarten A, B und C. Und Du hast - vom User auswählbare - Designs X,Y und Z. Und nehmen wir mal an, die Designs sind so unterschiedlich, dass sie nicht allein mit CSS machbar sind, sondern auch unterschiedliches HTML brauchen. Dann hast Du 9 mögliche Kombinationen, wie Du einen Artikel Nr. 4711 aufbereiten können musst.

            Mit Factories kann man das so lösen: Bevor Du die Seite erzeugst, holst Du aus den User-Settings die gewünschte Darstellungsart und erzeugst eine Renderer[1]-Factory für diese Darstellungsart. Es gibt 3 Factories, und jede hat eine Methode "GetRenderer(artikeltyp)". Wenn Du einen Artikel aufbereiten willst, dann kennst Du seinen Typ. Du rufst also

                $renderer = $factory->getRenderer($typ);
            

            auf und bekommst ein Objekt aus einer von 9 möglichen Klassen - abhängig von Artikeltyp und Darstellungsart. Dem sagst Du nur noch

               $renderer->render($article);
            

            und der Artikel wird zu HTML. Natürlich musst Du alle 9 Klassen programmieren, natürlich ist es sinnvoll, die so zu bauen, dass in ihnen möglichst viel wiederverwendet wird. Du kannst innerhalb der Factory-Methoden unterschiedliche Techniken nutzen, um einen switch über die möglichen Arten oder Typen zu vermeiden (weil Du es vermeiden willst, die Factory anzupassen nur weil ein neuer Typ hinzukommt). Gerne genommen wird hier "Convention before Configuration", d.h. wenn Du Typen A, B und C hast, schreibst Du Klassen RenderTypA, RenderTypB und RenderTypC, und die Factory verwendet Reflektionstechniken wie diese:

               $renderClass = "RenderTyp" + $type;
               $renderer = new $renderClass(...);
            

            Kommt nun ein Typ D hinzu, baust Du einfach eine Klasse RenderTypD und musst an der Factory nichts ändern.

            So, das war nun ein grober Abriss, einiges an Hirnschmalz wirst Du selbst noch investieren müssen. Viel Glück 😉

            Rolf

            --
            Dosen sind silbern

            1. „to render“ heißt "machen", "wiedergeben" und bezeichnet beim Programmieren den Vorgang, eine bestimmte Darstellung von Informationen zu erzeugen. ↩︎

            1. Moin RolfB,

              danke für die auführliche erklärung. Ich kenn die Anwendung von Factory Pattern und weis wie sie zu programmieren sind aber so ausführlich weis ich das nicht. Vielen Dank dafür und das bringt mich gleich zu nächsten Frage in eiem Neuen Thread ;-).

              vlg MB

            2. Dem Objekt, in dem Du später die Texte brauchst, gibst Du bei Erzeugung eine Instanz einer dieser Factories mit.

              Besser noch man gibt dem Objekt direkt die Texte, die es braucht.

          3. Überlege doch mal selbst MB, Du willst Artikel eintragen, was brauchst DU? Richtig, auf jeden Fall ein Formular. Was noch? Richtig, eine Übersicht, Tabelle oder Liste.

            Im Einfachsten Fall hat Du das alles auf einer Seite, bzw. in einem View. Was brauchst Du noch? Richtig, eine persistente Datenhaltung. Was passiert beim Hinzufügen eines neuen Artikels? Die Daten werden eingetragen und die ganze View wird neu geladen.

            Und wenn Du auf einen Artikel klickst, landen den seine Daten im Formular wo sie bearbeitet werden können. Brauchen wir hierzu eine Factory ? Nein brauchen wir nicht. Wir brauchen noch nicht einmal die Go 4 Gold oder irgendwelche Design Patterns. Nicht einmal MVC brauchen wir.

            Wir brauchen höchstens noch ein paar gute Ideen wie wir das Ganze so benutzerfreundlich wie möglich hinkriegen einschließlich einer eingebauten Suchfunktion, Blättereifunktion und Sortierfunktion.

            Und wenn wir das haben können wir vielleicht mal darüber reden, wie eine solche Klasse beschaffen sein muss, dass wir -- ohne den Code kopieren oder ändern zu müssen -- damit ein Gästebuch oder eine Artikelpflege für Badehosen, Schlüpfer oder Krawatten realisieren. Also außerhalb vom Code konfigurierbar sowas.

            Und jetzt haben wir auch ein Motiv!

            MfG

            PS Zu diesem Forum: Welcher Idiot gibt denn hierzu -1? War wohl doch ein bischen zuviel dem Niveau dieses Forums entsprechend.

            1. moin pl,

              schön erklärt. Ja ich überdenk noch mal die Planung, vielen Dank dafür pl.

              vlg MB

              1. Danke für Feedback mein Lieber.

                Die Factory wird ggf. ein Thema bei der Datenhaltung: Wie erfolgt die Datenübergabe von einer Instanz einer Klasse (Webanwendung App) an eine Instanz einer anderen, nicht verwandten Klasse (Data Access Layer DAL).

                Es ist u.a. die Frage ob und wie ich in meiner Anwendung eine DAL Instanz (Objekt) sichtbar mache oder nicht. Hierzu könnte ich die DAL Instanz über eine eigene Methode erzeugen, das ist die Idee hinter einer Factory. In Perl könnte das z.B. so aussehen:

                # $app ist die Instanz meiner Webanwendung
                # Daten aus dem Formular sind zu speichern
                
                # DAL instanz wird explizit mit einer eigenen Methode erzeugt
                $dal = $app->findDALfor( database => 'web', host => usw );
                $dal->checkin( $formdata );
                $dal->write;
                

                Und auch das lässt sich noch verbessern. MfG

  2. Ja. Genauso wie bei einem Gästebuch. MfG