Ankündigung

Einklappen
Keine Ankündigung bisher.

Aliases: Good Practice?

Einklappen

Neue Werbung 2019

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

  • Aliases: Good Practice?

    Hallo,

    haltet ihr es für eine gute Idee in einer etwas umfangreicheren Applikation mit einigen dutzend Models diese ganz oder teilweise mit zur Laufzeit erstellten Aliassen zu versehen?

    Leider haben die Models recht umfangreiche Namespaces der Art App\Modules\<Domain>\Models, was derzeit nicht zu ändern ist. Statt
    Code:
    use App\Modules\Users\Models\User;
    ein kurzes, knackiges
    Code:
    use User;
    wäre schon recht angenehm. Andererseits ist mir nicht als good practice bekannt, eine ellenlange Liste von Aliassen auf Models zu erstellen. Es gäbe eine an zentraler Stelle verwaltete Liste mit Aliassen und den hinterlegten Klassen. Erstgenannte würden dann zur Laufzeit erstellt. Siehe: https://github.com/laravel/laravel/b...g/app.php#L151

  • #2
    Aliases: Good Practice?

    Wieso nicht? Ist es denn guter Stil, einen Klassennamen immer absolut anzugeben? Denk an die Anzahl Änderungen, wenn die Klasse sich verschiebt und die Anzahl redundanter Zeichen.
    [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

    Kommentar


    • #3
      Erm. Naja, der Charme bei Namespaces ist ja, Kollisionen zu vermeiden. In sofern ist die Idee bestenfalls suboptimal. Vielleicht solltest du mal in Erwägung ziehen, mit etwas anderem als Notepad++ zu entwickeln.

      Kommentar


      • #4
        Code:
        use App\Modules\Users\Models\User;
        Ehrlich gesagt hab ich sowas noch nie benutzt.

        Bei mir sehen die eher so aus:

        Code:
        use Users\User;
        Wenn man nicht alle seine Klassen User nennt, kann man sich so auch ein paar Dinger spaaren.
        Die mysql_* Erweiterung ist veraltet!
        Besser: mysqli_* oder (noch besser) PDO

        Kommentar


        • #5
          Wie oft kommt es denn vor das du mehr als eine 'User' benannte Klasse in einer Datei verwendet?

          Wenn sich die Doppelungen in Grenzen halten kannst du immernoch :

          Code:
          use A\B\C\Repositories\User as UserRepository;
          usw A\B\C\Entities\User as UserE;
          Ist in vielen Fällen besser zu lesen, als der vollständige Name. Einige IDEs und Editoren sollten das sogar zum Teil von selbst können.

          Andererseits ist mir nicht als good practice bekannt, eine ellenlange Liste von Aliassen auf Models zu erstellen.
          Warum denn nicht? Solange jeder Name eindeutig ist sollte ein alias doch größtenteils Vorteile bieten.
          Zitat von nikosch
          Naja, anscheinend spricht die Steckdose kein HTTP. LOL

          Kommentar


          • #6
            Zitat von Suralc Beitrag anzeigen
            Wie oft kommt es denn vor das du mehr als eine 'User' benannte Klasse in einer Datei verwendet?
            Normalerweise ist in PHP 1 Datei = 1 Klasse.
            Es geht drum mehrere Klassen User im selben Namespace zu haben. Wenn man aber das Modul in den Namespace integriert, innerhalb des Moduls eine Klasse User als Model und eine UserController als Controller hat (oder so ähnlich), dann kann man so lange Dinger aber auch vermeiden.
            Die mysql_* Erweiterung ist veraltet!
            Besser: mysqli_* oder (noch besser) PDO

            Kommentar


            • #7
              Ich glaube, ihr redet aneinander vorbei

              Kommentar


              • #8
                Zitat von rkr Beitrag anzeigen
                Erm. Naja, der Charme bei Namespaces ist ja, Kollisionen zu vermeiden.
                Wenn ich zwei Vendor-Packages in meine Anwendung einbaue, beide keine Namespaces nutzen und es dann zu einer Kollision zweier gleichnamiger Klassen dieser Packages kommt - dann habe ich ein Problem, denn ich darf (=kann, aber sollte auf keinen Fall) diese Namen nicht ändern.
                Ich möchte aber nur eine zentral verwaltete Liste mit Aliassen aufstellen - aus meiner Applikation heraus. D. h. es kann nur zu Kollisionen kommen, die ich selber verursache. In dem Fall habe ich aber die Kontrolle. Ich kann Aliasse umbennenen oder auf einen Alias verzichten.
                Ich weiß zwar nicht, ob das bei großen Anwendungen mit vielen gleichnamigen Klassen in unterschiedlichen Namespaces nicht doch zu einem Problem werden könnte, aber derzeit sehe ich das nicht.
                Zitat von rkr Beitrag anzeigen
                Vielleicht solltest du mal in Erwägung ziehen, mit etwas anderem als Notepad++ zu entwickeln.
                PHPStorm, Sublime Text.
                Zitat von nameless97 Beitrag anzeigen
                [CODE]Bei mir sehen die eher so aus:
                Code:
                use Users\User;
                Wenn man nicht alle seine Klassen User nennt, kann man sich so auch ein paar Dinger spaaren.
                Die Struktur der Namensräume ist durch ein Package so vorgegeben.
                Es geht drum mehrere Klassen User im selben Namespace zu haben.
                Also euch vielleicht, mir nicht. Mir geht's nur darum, dass ich sehr viele Models mit sperrigen Namensräumen habe. Mir wäre nicht bekannt, dass das Package erlaubt die Namensräume zu verändern.
                innerhalb des Moduls eine Klasse User als Model und eine UserController als Controller hat (oder so ähnlich
                Das ist immerhin der Fall. Controller etc. haben alle das entsprechende Suffix.

                Kommentar


                • #9
                  Geht das syntaktisch überhaupt, dass du use User; schreibst, was dann als use My\Complicated\Namespace\User; interpretiert wird?

                  Kommentar


                  • #10
                    Zitat von monolith Beitrag anzeigen
                    Die Struktur der Namensräume ist durch ein Package so vorgegeben.
                    Achso, dann hab ich dich falsch verstanden.
                    Nun denn, ich würde es einfach so lassen. Ich mein, soo dramatisch ist das nun doch auch nicht, oder? Aber wenn es funktioniert und du so zufriedener bist, lass dich nicht aufhalten
                    Die mysql_* Erweiterung ist veraltet!
                    Besser: mysqli_* oder (noch besser) PDO

                    Kommentar


                    • #11
                      @mermshaus,

                      wenn ichs richtig verstanden habe, will er via class_alias() die Namespaces verkürzen
                      https://github.com/Ma27
                      Javascript Logic is funny:
                      [] + [] => "", [] + {} => object, {} + [] => 0, {} + {} => NaN

                      Kommentar


                      • #12
                        Exakt. Sorry, das habe nicht ausgedrückt. Asche auf mein Haupt. Ich habe den Startpost überarbeitet.

                        Kommentar


                        • #13
                          @Ma27: Okay. Ich wusste nicht, dass so was auch beim Einsatz in use-Statements und dergleichen funktioniert.

                          Ich glaube, das wäre mehr so ein Convenience-Feature von der Art, die man erst toll findet, die man aber irgendwann später wieder entfernt, weil es irgendein Problem damit gibt (zum Beispiel: Code-Analyse-Tools und Doku-Generatoren verstehen es nicht) oder weil man doch nur am Suchen ist, was jetzt was ist, oder weil man irgendein praktisches Feature seines Editors gefunden hat.

                          Ich kann in NetBeans etwa „use Klassenname“ tippen und erhalte ein Dropdown, aus dem ich mir dann von den möglichen Namespaces den richtigen dazu aussuchen kann.

                          Glaube, man kann ansonsten Namespaces per use-Statement aliasen. Weiß nicht, ob das was bringt.

                          Code:
                          use very\long\namespace\that\is\very\long as v;
                          use v\Foo;
                          use v\Bar;
                          An den class_alias-Aliasen würde mich auch noch abschrecken, dass du den eigentlichen Code (den mit den use-Statements) dann nur dann (wieder)verwenden kannst, wenn du vorher die class_alias-Zeilen aufrufst.

                          Kommentar


                          • #14
                            Ich finde es immer problematisch, wenn die Klassen aus "mysteriösen" oder schwer erklärbaren Orten entspringen. Sobald man class_alias() einsetzt benötigt man eine verrückt gute IDE, damit man die ursprüngliche Definition der Klasse noch findet. Ansonsten ist ein navigieren durch die Ordnerstrutkur anhand des Namespaces möglich - sehr komfortabel.

                            Meiner Meinung nach ist es sauber, mittels "use" alle Klassen, die man benötigt zu importieren. Danach kann man diese mit dem Alias ansprechen, bzw. ihrem Klassennamen ohne Namespace. Java handhabt dies z.B. sehr ähnlich.

                            Jedoch bevorzuge ich in phpDocs wieder den absoluten Namen - das macht den PHP-Doc einfacher lesbar und unabhängig von jeglichen uses.
                            [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

                            Kommentar


                            • #15
                              Hallöchen,

                              ich kann mich mermshaus da voll und ganz anschließen und würde aus genannten Gründen vollständig darauf verzichten. Die großen Vorteile sehe ich ehrlich gesagt auch nicht und wenn man einen ordentlichen Namespace für seine eigenen Klassen wählt, dürfte es i.d.R. zu keinen Kollisionen mit Vendor-Packages kommen.

                              Viele Grüße,
                              lotti
                              [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

                              Kommentar

                              Lädt...
                              X