Ankündigung

Einklappen
Keine Ankündigung bisher.

Klasse DB überall verwenden

Einklappen

Neue Werbung 2019

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

  • Klasse DB überall verwenden

    Hi,

    ich habe eine Klasse Loader die mir alles mögliche mit dem ORM Doctrine erstellt, also eine DB-Verbindung, eine entityManager Variable etc.

    Code:
    class Loader {
      public $entityManager;
      ....
      __construct() {
        // erstellt alles notwendige
      }
    }
    Möchte diesen entityManager nun in allen meinen sonst angelegten Objekten verwenden, da scheiterts bei mir grad an den Basics.

    ich würde das momentan immer so machen

    Code:
    $Loader = new Loader();
    new Auto($Loader);
    new Fahrrad($Loader);
    etc.

    Angenommen ich hätte 50 Klassen die den Loader benötigen, immer das selbe Prozedere ist doch irgendwie schräg den immer "mitzuschleppen".

    Von Vererbung hab ich natürlich schon gehört, aber wenn die Loader-Klasse meine Elternklasse ist, dann erstellt doch der Loader für jede dieser Klassen ebenfalls eine Connection, was aber nur 1x notwendig wäre.

    Wie sieht da die Optimallösung aus, helfts mir bitte auf die Sprünge.

    Danke & Liebe Grüße


  • #2
    Dein Beispiel ist schon ein guter Ansatz. Das nennt sich Dependency Injection. Google mal danach, da findest du eine menge Informationen dazu. Unter anderem auch warum der Ansatz dann doch nicht so gut ist und was es für bessere Möglichkeiten gibt.

    PS: müssen Auto und Fahrrad wirklich die Datenbank kennen?

    Kommentar


    • #3
      Zitat von erc Beitrag anzeigen
      PS: müssen Auto und Fahrrad wirklich die Datenbank kennen?
      Naja, sie müssen beide auf den entityManager zugreifen können der die inserts/updates macht.

      Kommentar


      • #4
        Ich glaub der Beitrag am Ende von
        http://stackoverflow.com/questions/3...-in-my-project
        ist ungefähr das wonach ich suche,

        oder ist das müll?

        Kommentar


        • #5
          Das ist so eine Art Singleton. (Beziehungsweise willst du es wohl wie eins nutzen.)

          Damit schaffst du dann statische Abhängigkeiten zur Klasse Factory. Das ist allgemein nicht zu empfehlen.

          - http://misko.hevery.com/code-reviewe...te-singletons/

          Ich glaube, du verwendest Doctrine aber möglicherweise falsch/ungewöhnlich. Ist eine Weile her, dass ich damit was gemacht habe, aber es erscheint mir nicht richtig, selbst irgendwas per Konstruktor in die Entities reinzuladen.

          Kommentar


          • #6
            Zitat von mermshaus Beitrag anzeigen
            Ich glaube, du verwendest Doctrine aber möglicherweise falsch/ungewöhnlich. Ist eine Weile her, dass ich damit was gemacht habe, aber es erscheint mir nicht richtig, selbst irgendwas per Konstruktor in die Entities reinzuladen.
            Wieso das?
            Der Entitymanager sorgt dafür dass ich alle meine Queries ausführen kann und mein Ziel ist es letztendlich diesen entitymanager nur 1x zu initialisieren und nicht in jeder Klasse die diesen verwenden will den ganze Loader-Klasse mitzugeben.

            Mit der zu Beginn beschriebenen Variante ist das ja auch der Fall, muss aber jedes mal das Objekt mitgeben wo dies geschieht, würde ich gerne meiden, aber vielleicht ist das letztendlich eh die "sauberste" Lösung, da versuch ich hier die Community einzubeziehen in die ich großes Vertrauen habe
            Schmücken könnte ich die Variante dann eh so ,dass es in einer Parent Klasse ein getEntityManager() mit allem drum und dran gibt und ich müsste nicht in jeder Klasse das Prozedere wiederholen, wie seht ihr das?

            P.S: Danke für jeden Tipp/jede Unterstützung die ich bereits erhalten habe

            Kommentar


            • #7
              ich glaub ich habe mich jetzt für die von mir als sauber dargestellte Variante ($Loader immer übergeben) entschieden, dachte ich könnte nachher nämlich diverse Methoden aus anderen Klassen nicht ausführen, aber das ist ein Irrtum, da sollte es keine Einschränkungen geben.

              Auf jeden Fall danke für eure Unterstützung, sollte wer noch feinere Vorschläge haben nur her damit

              lg

              Kommentar


              • #8
                Wieso das?
                Weil Doctrine das eigentlich alles automatisch verdrahtet.

                Hier in der Einführung…

                - http://doctrine-orm.readthedocs.org/...g-started.html

                …wird zum Beispiel an Bug, Product oder User nirgendwo der Entity-Manager oder so was übergeben.

                Oder sind „Auto“ und „Fahrrad“ bei dir oben keine Entities? Falls nein, was dann?

                Kommentar

                Lädt...
                X