Ankündigung

Einklappen
Keine Ankündigung bisher.

Constructor-Injection: Konstruktor zu groß

Einklappen

Neue Werbung 2019

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

  • Constructor-Injection: Konstruktor zu groß

    Hallo,

    ich arbeite mit einem DI-Container und bis jetzt ausschließlich mit Constructor injection.
    Nun sind einige meiner Konstruktor-Signaturen schon sehr lange.

    Wie kann man das beheben?
    Auf Setter Injection umsteigen? (habe aber gelesen man sollte eher Constructor Injection vorziehen)
    Habe auch gelesen Facade Pattern wäre ein Ansatz?!

    gibt es sonst noch Vorschläge?

    Lg


  • #2
    Refactoring machen und dabei Delegation & Komposition noch einmal checken. Braucht deine Klasse immer alle übergebenen Objekte? Benötigst du sie tatsächlich schon beim Initialisieren? Sind die übergebenen Parameter tatsächlich alle komplett unabhängig? (Tipp: Vermutlich nicht.)

    Kommentar


    • #3
      Hallo,

      ehrlich gesagt weiß man viel zu wenig über deine Anwendung um hier gezielt Ratschläge geben zu können.

      Was das Facade Pattern tut, bzw. wofür es da ist, ist dir bekannt? Es hält ja ja nur Anwendungsteile über eine Methode vor, mehr macht das nicht. Heißt du würdest einen benötigten Anwendungsteil nicht über zig Teilinstanzen in einem Prozess verwenden, sondern würdest über eine Fassade dies zur Verfügung stellen. Hat jetzt aber nicht wirklich was DI zu tun.

      Du könntest natürlich eine Facade in einem DIC aufrufen und diesen DIC dann injizieren.

      Aber wie gesagt, dass sind alles Spekulationen, mehr Infos und eventuell Codeauszüge mit etwas Beschreibung wären um einiges hilfreicher für uns.

      Gruß Litter
      Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
      http://www.lit-web.de

      Kommentar


      • #4
        Hey,

        also Symfony macht das so:
        http://symfony.com/doc/current/compo...ion/types.html

        Da werden die Möglichkeiten Setter Injection, Property INjection (was aber Probleme beim Type Hinten auslöst) und Constructor Injection gezeigt.
        Die Ansätze kannste ja auch nutzen

        LG
        https://github.com/Ma27
        Javascript Logic is funny:
        [] + [] => "", [] + {} => object, {} + [] => 0, {} + {} => NaN

        Kommentar


        • #5
          Bietet Symfony nicht auch eine @Autowired Annotation für DI sowie in Java das mit Spring gemacht wird, oder irre ich da? Ich dachte das im Zusammenhang mit Symfony auch schon mal gelesen zu haben.
          Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
          http://www.lit-web.de

          Kommentar


          • #6
            Dafür gibt es soweit ich weiß nur das da: https://github.com/schmittjoh/JMSDiExtraBundle

            Aber im PHP Bereich hab ich ehrlich gesagt nicht sehr viel übrig für Annotationen
            https://github.com/Ma27
            Javascript Logic is funny:
            [] + [] => "", [] + {} => object, {} + [] => 0, {} + {} => NaN

            Kommentar


            • #7
              Constructor-Injection sollte man in jedem Fall vorziehen. Es gibt da ein paar Ausnahmen: Schau dir (das eigentlich auch nicht durchdachte) Monolog an. Da kannst du Handler über die Methode pushHandler() hinzufügen.

              Wenn deine Klasse zu viele Abhängigkeiten hat, dann hat sie möglicherweise auch viele Zuständigkeiten und ist möglicherweise zu groß. Wie viel ist denn "viel"?
              Standards - Best Practices - AwesomePHP - Guideline für WebApps

              Kommentar


              • #8
                Wäre gut, wenn Du mal Code posten könntest, so wird einfach viel spekuliert.

                Es gibt da ein paar Ausnahmen: Schau dir (das eigentlich auch nicht durchdachte) Monolog an. Da kannst du Handler über die Methode pushHandler() hinzufügen.
                Hmm..fällt mir gerade keine Situation ein, wo ich das zwingend brauche.

                Wenn deine Klasse zu viele Abhängigkeiten hat, dann hat sie möglicherweise auch viele Zuständigkeiten und ist möglicherweise zu groß. Wie viel ist denn "viel"?
                Sehe ich auch so, deswegen: mal deinen code bitte zeigen.

                mfg wolf29
                while (!asleep()) sheep++;

                Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

                Kommentar


                • #9
                  Zitat von Ma27 Beitrag anzeigen
                  Da werden die Möglichkeiten Setter Injection, Property INjection und Constructor Injection gezeigt.
                  Die Ansätze kannste ja auch nutzen
                  Property Injection ist grundsätzlich nicht zu empfehlen, da Type Hinting dort nicht möglich ist.

                  Kommentar


                  • #10
                    @jprangernberg,

                    jup - das steht auch in der Symfony Doku und ist natürlich vollkommen richtig und es war ein Fehler, es vergessen, zu erwähnen

                    EDIT:
                    so, hab meinen oberen Post bearbeitet
                    https://github.com/Ma27
                    Javascript Logic is funny:
                    [] + [] => "", [] + {} => object, {} + [] => 0, {} + {} => NaN

                    Kommentar

                    Lädt...
                    X