[PHP5] Start mit OOP / Frage zu Klassenstruktur

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

  • #16
    Original geschrieben von phpguru42
    Wenn man allein an einem Projekt arbeitet, mag das ja ok sein.
    Aber stell' Dir mal ein größeres Projekt vor, mit neuen, unerfahrenen Entwicklern, die ins Team kommen. Wie willst Du dann verhindern, das eine neue Instanz mit new() erzeugt wird?
    Konvention?
    Im Übrigen lassen sich Registry und Singleton auch vereinen.

    Grüße
    Nieder mit der Camel Case-Konvention

    Kommentar


    • #17
      @phpguru42
      Wann und in welcher konkreten Situation ist denn deiner Ansicht nach ein Singleton die bessere Wahl?
      Wir werden alle sterben

      Kommentar


      • #18
        Original geschrieben von phpguru42
        Wenn man allein an einem Projekt arbeitet, mag das ja ok sein.
        Aber stell' Dir mal ein größeres Projekt vor, mit neuen, unerfahrenen Entwicklern, die ins Team kommen. Wie willst Du dann verhindern, das eine neue Instanz mit new() erzeugt wird?
        Mit den selben Mitteln, mit denen du verhinderst, dass Sie bereits existierende Routinen neu schreiben ...

        Bzgl. Singleton glaube ich, dass es sich dabei um genau so ein grundlegendes Missverständnis handelt, wie mit der hungarian Notation. Nicht kapiert, trotzdem gut, weitererzählt. Aber nicht im Sinne des Erfinders. EIgentlich sollte ich mich da mal schlau machen und gucken, was Fowler dazu schreibt. Ich meld mich morgen diesbezüglich nochmal
        Zuletzt geändert von unset; 24.11.2008, 22:48.
        [FONT="Helvetica"]twitter.com/unset[/FONT]

        Shitstorm Podcast – Wöchentliches Auskotzen

        Kommentar


        • #19
          Original geschrieben von unset
          Mit den selben Mitteln, mit denen du verhinderst, dass Sie bereits existierende Routinen neu schreiben ...
          Nur mit dem Unterschied, dass ich als Neuling im Team genau diese Klasse aus der Dokumentation jetzt gerade gebrauchen könnte und mir desshalb ein Objekt mit new bar() schnell ranhole, weil ich nicht wusste, dass man dazu $bar = Registry::get('bar') benutzt. Die Idee, die Klasse mit 1000 Zeilen neu zu implementieren, wäre mir dann erst später gekommen

          Kommentar


          • #20
            Original geschrieben von phpguru42
            Nur mit dem Unterschied, dass ich als Neuling im Team genau diese Klasse aus der Dokumentation jetzt gerade gebrauchen könnte und mir desshalb ein Objekt mit new bar() schnell ranhole, weil ich nicht wusste, dass man dazu $bar = Registry::get('bar') benutzt. Die Idee, die Klasse mit 1000 Zeilen neu zu implementieren, wäre mir dann erst später gekommen
            Und in dieser Dokumentation ist nicht vermerkt, dass das Objekt in der global verfügbaren Registry hinterlegt ist? Was für eine beschissene Doku.
            [FONT="Helvetica"]twitter.com/unset[/FONT]

            Shitstorm Podcast – Wöchentliches Auskotzen

            Kommentar


            • #21
              unset, welch sachliches Argument, und vermutlich sind die GoF auch Schwachköpfe in Deinen Augen.


              Manchmal fragt man sich echt.

              Kommentar


              • #22
                Original geschrieben von phpguru42
                unset, welch sachliches Argument, und vermutlich sind die GoF auch Schwachköpfe in Deinen Augen.


                Manchmal fragt man sich echt.
                Du begreifst nicht, auf was ich hinaus will. Du wirst in einem Team rein gar nicht verhindern können. Du wirst nur eine gewisse Menge von Mitteln haben, um bestimmte Konventionen (evtl. ist dir das Wort in diesem Thread schon über den Weg gelaufen ...) aufzustellen, an die man sich halten muss. Diese Konventionen können unter anderem eine Dokumentation der Struktur beinhalten, die dem Neuling nicht nur sagt, was welche Klassen machen, sondern auch wo sie in welcher Instanz zur Verfügung stehen.

                Und nein, die GoF sind keine Idioten. Es sind aber auch keine unfehlbaren Götter.

                Evtl. liest du auch mal, was man hier sonst so schreibt. Deine unqualifizierten Beispiele sind nunmal Steilvorlagen für ebenso unqualifizierte Antworten.

                Und jetzt darfst du dich wieder fragen, du Guru.
                [FONT="Helvetica"]twitter.com/unset[/FONT]

                Shitstorm Podcast – Wöchentliches Auskotzen

                Kommentar


                • #23
                  Original geschrieben von unset
                  Du wirst nur eine gewisse Menge von Mitteln haben, um bestimmte Konventionen (evtl. ist dir das Wort in diesem Thread schon über den Weg gelaufen ...) aufzustellen, an die man sich halten muss. Diese Konventionen können unter anderem eine Dokumentation der Struktur beinhalten, die dem Neuling nicht nur sagt, was welche Klassen machen, sondern auch wo sie in welcher Instanz zur Verfügung stehen.
                  Ja, und das Singleton-Pattern hilft dabei, versehentlich eine neue Instanz zu erzeugen, wenn es nicht dokumentiert wurde. Warum soll man auf restriktive Mechanismen der Programmiersprache nicht zurückgreifen dürfen?

                  Ebenso könntest Du das Type Hinting in PHP5 ins lächerliche ziehen, schließlich sind doch in der Doku die Typen für jeden Funktions- / Methodenaufruf per Konvention festgelegt! Und wenn nicht, dann ist es eine beschissene Doku.

                  Kommentar


                  • #24
                    Du verstehst nicht, worauf die beiden hinaus wollen. Das Singletan-Pattern ist vielleicht sehr nützlich, das Registry-Pattern erfüllt aber die gleiche Anforderung, eine anwendungsweite Instanz zur Verfügung zu stellen, verhindert dabei aber nicht, das weitere Instanzen der Klasse erstellt werden können. Das ist am Beispiel Datenbankverbindung sehr schön zu sehen.
                    Sinnvoll finde ich das Singleton-Pattern dennoch in einer Abwandlung, die weitere Instanzen zulässt, d.h. der Konstruktor bleibt public. Damit erreichst du das gleiche, wie im Registry-Pattern, aber direkt an der Klasse und damit für jeden sofort ersichtlich.

                    Kommentar


                    • #25
                      Original geschrieben von phpguru42
                      Ja, und das Singleton-Pattern hilft dabei, versehentlich eine neue Instanz zu erzeugen, wenn es nicht dokumentiert wurde. Warum soll man auf restriktive Mechanismen der Programmiersprache nicht zurückgreifen dürfen?
                      Wenn du tatsächlich das manuelle erstellen von Instanzen verhindern willst, wirst du Exceptions werfen, sollte man das versuchen. Das ist darüberhinaus auch sauberer, als einen Entwickler ins Messer rennen zu lassen.

                      Ich bin ohnehin der Meinung, dass Singelton Klassen ausschließlich über Factory-Helfer erstellt werden sollten. Damit wäre zum einen das ungewollte mehrfache Instanzieren als auch das evtl. begrenzte Instanzieren abgegolten.

                      Prinzipiell ist es mir aber scheiß egal, wie andere Leute ihre Software zusammenschrauben. Ich hab nur keinen Bock, von daraus resultierenden dummen Fragen und im Vorfeld erkannten Problemen lesen zu müssen.

                      Es ist, wie ich auch schon vorher sagte, wie mit der ungarischen Notation: Ist falsch verstanden immer noch gut. Aber nicht das beste.
                      [FONT="Helvetica"]twitter.com/unset[/FONT]

                      Shitstorm Podcast – Wöchentliches Auskotzen

                      Kommentar


                      • #26
                        Wikipedia sagt u.A. dazu:
                        Das korrekte Design von Singletons ist schwierig – in der Regel schwieriger als Designs ohne Singletons.
                        Und dem kann ich nur zustimmen!
                        Nagut, das fällt einem nicht sofort auf, aber bei Wartungsarbeiten wird man doch mit der Nase voll da rein gestoßen.

                        Und nochmal:
                        Singletons machen unter PHP die Vererbung kaputt.
                        Will man das wirklich?
                        Das ist eine ziemlich hässliche Einschränkung.
                        Wir werden alle sterben

                        Kommentar


                        • #27
                          Und nochmal ich. Wie versprochen habe ich Patterns of Enterprise Application Architecture zu Rate gezogen. Und siehe da: Fowler erwähnt Singletons lediglich im zusammenhang mit einer Registry ...
                          [FONT="Helvetica"]twitter.com/unset[/FONT]

                          Shitstorm Podcast – Wöchentliches Auskotzen

                          Kommentar


                          • #28
                            Hat man einmal begriffen, wie ein Hammer funktioniert, dann sieht die ganze Welt plötzlich wie ein Nagel aus...
                            Wir werden alle sterben

                            Kommentar


                            • #29
                              Original geschrieben von combie
                              Und nochmal:
                              Singletons machen unter PHP die Vererbung kaputt.
                              Will man das wirklich?
                              Das ist eine ziemlich hässliche Einschränkung.
                              Dafür gibt es inzwischen eine Lösung: Implementing a Singleton Base Class in PHP 5.3

                              Kommentar


                              • #30
                                1. Habe ich das schon gesagt, aber danke für die Wiederholung, dann begreift es wenigstes auch der Letzte....
                                Die Singleton Eigenschaft einer Klasse ist unter PHP<5.3 nicht vererbbar.
                                2. ist PHP5.3/6 noch lange nicht für den Produktiveinsatz geeignet.

                                Das war also nix....
                                Wir werden alle sterben

                                Kommentar

                                Lädt...
                                X