Rolf B: Instanzstrukturen mit TraitsHelper oder HelperService Meinung

Beitrag lesen

Hallo MB,

TraitHelper und AbstractInstance sind zu eng gekoppelt. Der Trait liefert einen Setter für eine private Eigenschaft von AbstractInstance. Vermutlich liefert er noch mehr und du zeigst nur beispielhaft eine Methode - aber bei dem, was Du zeigst, lautet die Aussage: Entweder gehört _doSomething nach AbstractInstance, oder $_storage gehört in den TraitHelper. Methode und Property gehören jedenfalls zusammen, nicht auseinander. Es zu trennen ist ein Unfall, der darauf wartet, zu passieren.

Einsatzzweck von Traits ist das wiederverwendbare Anflanschen von Methoden an Klassen, die keine gemeinsame Elternklasse haben. Traits sollten meiner Meinung nach auch niemals direkt auf Properties des Objekts zugreifen, in dem sie geUSEt werden, und sie sollten alle Methoden USEenden Objekts, die sie verwenden, per abstract-Deklaration anmelden, so dass es nicht möglich ist, einen Trait dort zu verwenden wo er nicht funktionieren kann.

Also - gibt es mehrere Klassenhierarchien (oder Klassen), die keine gemeinsame Wurzel haben, und die diesen Trait benötigen? Dann hat er Existenzberechtigung. Andernfalls solltest Du ihn nach AbstractInstance integrieren. FALLS es irgendwann noch AbstractInstance2 gibt, das logisch so weit von AbstractInstance entfernt ist, dass eine gemeinsame Elternklasse nicht sinnvoll ist, DANN kannst Du den StorageTrait immer noch aus AbstractInstance herausfaktoriesieren.

Vor Overengineering habe ich dich schon mehrfach gewarnt. Baue nicht zu viel Abstrakta für "zukünftige Erweiterungen". Zum einen weißt Du heute nicht, ob sie wirklich kommen. Zum anderen ist das Problem von Voraussagen, dass sie immer dann schwierig werden, wenn sie sich auf die Zukunft beziehen. Deine zukünftige Erweiterung mag ganz anders werden als Du heute glaubst, und deine gelegten Fundamente könnten sich als falsch platziert erweisen. Baue heute, was Du heute brauchst. Und wenn Du mehr brauchst, refaktoriere und erweitere.

Baue für das, was Du heute baust, Unittests. Damit kannst Du sicherstellen, dass dein Code nach dem refaktorieren immer noch funktioniert.

Rolf

--
sumpsi - posui - obstruxi
0 66

Instanzstrukturen mit TraitsHelper oder HelperService Meinung

MB
  • meinung
  • php
  • programmiertechnik
  1. 1
    pl
    1. 0
      MB
      1. 0
        pl
        1. 0
          MB
  2. 0
    MB
    1. 0
      pl
      1. 0
        MB
        1. -2
          pl
          1. 0
            MB
            1. 0
              pl
        2. -1
          pl
          1. 0
            MB
            1. 0
              pl
          2. 0
            dedlfix
            1. 0
              MB
              1. 1
                dedlfix
                1. 0
                  MB
              2. -1
                pl
  3. 2
    Rolf B
    1. 0
      MB
      1. 0
        Rolf B
        1. 0
          pl
          1. 0
            Rolf B
            1. 0
              pl
          2. -1
            pl
            1. 0
              dedlfix
              1. 0
                pl
  4. -1
    pl
    1. 0
      MB
      1. 0
        pl
        1. 0
          MB
          1. 0
            Rolf B
            1. 1
              pl
            2. 1
              dedlfix
              1. 1
                Rolf B
                1. 0
                  dedlfix
              2. 1
                pl
                1. 0
                  dedlfix
                  1. 0
                    Rolf B
                    1. 0
                      dedlfix
            3. 0
              MB
  5. 0
    pl
    1. 0
      MB
      1. 0
        pl
        1. 0
          Rolf B
          1. 0
            pl
      2. 0
        MB
        1. 0
          pl
          1. 0
            MB
  6. 0
    MB
    1. 3
      dedlfix
      1. 0
        MB
        1. 0
          Matthias Apsel
          1. 0
            MB
            1. 0
              Matthias Apsel
              1. 0
                Rolf B
                1. 0
                  Matthias Apsel
                  1. 0
                    Rolf B
                    1. 0
                      Matthias Apsel
            2. 1
              dedlfix
              1. 0
                MB
    2. -1
      pl
    3. 1
      Rolf B
      1. 0
        MB
        1. 0
          MB