Whouzuo: "5 Strengths of PHP"

Beitrag lesen

Moin!

In Kombination mit Dereferencing, können wir Method-Chaining benutzten. Stell dir eine Liste von Produkten vor, wir wollen den Gesamtpreis ermitteln:

gesamt = produkte.map( getPreis ).reduce( sum );

In prozeduraler Schreibweise sähe das so aus:

gesamt = reduce( map( produkte, getPreis ), sum );

Es gibt einen einfacheren Weg:

gesamt = produkte.gesamtpreis();

Du wirst aber keine Klasse haben, "produkte" heißt oder? ;)

'...haben, DIE "produkte" heißt, oder?'

"produkte" ist im Sinnzusammenhang der Variablenname, nicht der Klassenname.

Warenkorb.gesamtpreis() könnte ich mir noch vorstellen, aber das ist semantisch dann auch etwas anderes. Denn nicht immer stellt eine Liste an Produkten einen Warenkorb dar.

Richtig, aber genau das ist mein Kernpunkt: Wenn man darüber redet, in welchem Sinnzusammenhang eine Ansammlung von mehreren Produkten zu sehen ist, und was man damit so alles machen kann, dann ist genau das das Argument gegen generische Collections ohne sinnvolle Methoden, die eben genau diesen Sinnzusammenhang widerspiegeln.

Listen von Produkten - das könnte in einem Shop ein Warenkorb sein. In diesem Sinnzusammenhang kann ein Produkt ein oder mehrere Male im Warenkorb liegen, wird einen Preis haben und es wird sinnvoll sein, den Warenkorb nach seinem Gesamtpreis zu fragen.

Richtig, aber irgendwie musst du das ganze ja innerhalb des Warenkorbs implementieren. Und dort hast du dann genau das, was oben beschrieben ist: eine Liste von Produkten und deren Gesamtpreis musst du berechnen.

Das Argument spielt sich augenscheinlich ausschließlich auf Datenstrukturebene ab. Natürlich sind Datenstrukturen nicht überflüssig oder irrelevant, aber nach meiner Wahrnehmung ist der relevantere Teil die einer Applikation innewohnende Businesslogik.

...und diese ist fest mit den Datenstrukturen gekoppelt. Denn Datenstrukturen sollen ja Dinge aus der realen Welt abstrakt repräsentieren - sonst bräuchten wir sie nicht. Und Dinge, die in der realen Welt sehr oft vorkommen, werden eben als gängige Datenstrukturen von der Sprache bereitgestellt, sodass sie nicht mehr selbst gebastelt werden müssen. Dazu gehören Listen, Maps und anderes.

Nein, ich glaube eher nicht, dass die Businesslogik FEST mit Datenstrukturen gekoppelt ist. Tatsächlich würde ich eher glauben, dass die Businesslogik sehr fest strukturiert ist, die zugehörigen Daten aber tatsächlich einem relativ starken Wandel unterliegen können.

Mit dem "fest" meinte ich, dass eine Änderung der Businesslogik zwangsläufig mit einer Änderung der Datenstrukturen (z.B. einer Änderung von Klassen) einhergeht. Natürlich nur (bevor du jetzt wieder pingelig wirst ;), wenn auch Objekte betroffen sind oder deren Abhängigkeiten, nicht wenn sich die Mehrwertsteuer um x% erhöht.

Beispiel: SEPA. Die konkreten Kontoverbindungsdaten haben sich ziemlich massiv geändert. Die drumherumliegende Logik einer Kontoverbindung auch. Auf höherer Ebene hingegen hat sich eigentlich nichts getan: Eine Kundenbestellung mit Zahlungsart "Abbuchung" braucht eine gültige Kontoverbindung.

Aber die Repräsentation einer Kontoverbindung sieht jetzt anders aus. Wäre das nicht so, hätte auch nichts angepasst werden müssen. =)

Man wird sicherlich Arrays eher intern innerhalb von Objekten verwenden, um irgendein konkretes der obigen Konzepte abzubilden, und sie nicht nach außen anbieten. Auf der anderen Seite spricht aus meiner Sicht nichts dagegen, Arrays genau dann einzusetzen, wenn "mehr als eins" in einer Datenstruktur vorkommt - auch öffentlich erreichbar.

Wenn man das tut, dann ist es auch okay. Nur leider, muss man sich dann z.B. "normalen" Listen erstmal selbst definieren anstatt arrays dafür benutzen zu können. Trotzdem stimme ich dir in diesem ersten von dir genannten Punkt zu.

Wie ich oben ausführte, will man das sogar, weil auch Listen Logiken implementieren. PHP bietet dafür auch ausreichend Basismaterial an, dass man verwenden könnte: Diverse Interfaces (Countable, Traversable, ArrayAccess) und Objekte (ArrayIterator, ArrayObject, SplFixedArray, SplObjectStorage, SplDoublyLinkedList).

Na anscheinend nicht genug. Sonst hätte Facebook ja nichts dazugebastelt. =)

0 51

"5 Strengths of PHP"

tami
  • zur info
  1. 0
    hotti
    1. 0
      M.
      1. 0
        hotti
        1. 0
          tami
        2. 0
          M.
        3. 0
          Sven Rautenberg
          1. 0
            hotti
            1. 0
              M.
              1. 0
                hotti
                1. 0
                  M.
                  1. 0
                    Whouzuo
                  2. 0
                    hotti
                    1. 0
                      M.
            2. 0
              Der Martin
              1. 0
                M.
            3. 0

              Unser Wiki als Online-Fassung

              1UnitedPower
              • selfhtml-wiki
              1. 0

                Unser Wiki als Offline-Fassung

                Matthias Apsel
  2. 2
    1UnitedPower
    1. 3
      Klawischnigg
    2. 0
      tami
      1. 1
        molily
        1. 0
          tami
          1. 0
            1UnitedPower
            1. 0

              mathematische Menge vs. Datenstruktur Menge

              Matthias Apsel
              1. 0

                physikalische Menge vs. mathematische Menge

                1UnitedPower
                1. 0
                  Matthias Apsel
            2. 0
              tami
              1. 0
                Whouzuo
                1. 0
                  tami
                  1. 0
                    Whouzuo
              2. 0
                1UnitedPower
            3. 0
              molily
            4. 0
              Sven Rautenberg
              1. 0
                Whouzuo
                1. 1
                  Sven Rautenberg
                  1. 0
                    Whouzuo
              2. 0
                1UnitedPower
                1. 0
                  Der Martin
                  1. 0
                    1UnitedPower
                    1. 0
                      Der Martin
                2. 0

                  Ein Wort für funktionale Programmierung

                  1UnitedPower
                  1. 0

                    Ein Wort für funktionale Programmierung - Ramda und Currying

                    tami
                    1. 0

                      Ein Wort für funktionale Programmierung - Ramda is curried

                      tami
      2. 0
        Sven Rautenberg
        1. 0

          was bringt Hack mit Collections und Closures?

          tami
          1. 0
            tami Linksetzer
            1. 0

              Hack-like Collections in anderen Frameworks?

              tami
          2. 0
            Sven Rautenberg
            1. 0

              Beispiel für Closures in PHP (was mit privaten Vars nicht geht)

              tami
    3. 0
      Texter mit x