Ankündigung

Einklappen
Keine Ankündigung bisher.

Wie am besten Fehler zurückgeben?

Einklappen

Neue Werbung 2019

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

  • #76
    Diese Methode wird praktisch nie auf Felder angewendet, die selbst auch NULL sein können.
    praktisch ?? aber manchmal doch ?
    Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.

    Kommentar


    • #77
      Zitat von Koala Beitrag anzeigen
      praktisch ?? aber manchmal doch ?
      Ist ne Konvention. Meine Kollegen wissen, wie man diese Methode benutzen muss. Das ist bei näherer Betrachtung auch alles logisch. Diese Methode wird eigentlich nur benutzt, wenn man auf ein bestimmtes Feld oder auf eine Aggregate-Funktion zurückgreifen will. Wenn da dann NULL im Feld steht, oder es den Datensatz nicht gibt, macht dabei keinen Unterschied.

      Wenn man unterscheiden muss, ob das Feld NULL ist, oder ob es den Datensatz nicht gab, greift man auf fetchAssoc() zurück.

      Kommentar


      • #78
        Ist ne Konvention. Meine Kollegen wissen, wie man diese Methode benutzen muss.
        na ja, das sollte man anders lösen.
        Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.

        Kommentar


        • #79
          Zitat von Koala Beitrag anzeigen
          na ja, das sollte man anders lösen.
          Das geht wahrscheinlich nicht immer. Häufig genug werden Methoden so entwickelt, dass sie mehr der Performance als der Useability dienen. Oder aus anderen Gründen. Aus Sicht einer intuitiven Nutzung tut diese Methode genau was sie soll. Dass sie keine Exception wirft, liegt daran, dass hier der unnötige Overhead durch ein andererseits fast obligatorisches TryCatch gespart werden soll. Man muss nur ein winzig kleines Detail wissen.

          Von Aussen betrachtet gebe ich dir aber recht

          Kommentar


          • #80
            Dass sie keine Exception wirft, liegt daran, dass hier der unnötige Overhead durch ein andererseits fast obligatorisches TryCatch gespart werden soll.
            Immer Scalar; bei Fehler => Exception;
            [COLOR="#F5F5FF"]--[/COLOR]
            [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
            [COLOR="#F5F5FF"]
            --[/COLOR]

            Kommentar


            • #81
              Zitat von nikosch Beitrag anzeigen
              Z.B. "Verbindung zu DB abgerissen"

              Knallt durch bis bootstrap und macht 500

              Kommentar


              • #82
                Ich finde die Methode insgesamt etwas seltsam konzipiert und auch den Namen missverständlich. Ich würde erwarten, einen Datensatz als nicht-skalare Struktur zu erhalten.

                Das Argument, beispielsweise try/catch zu umgehen, um die Performance zu steigern, finde ich kaum haltbar, wenn wir den Kontext eines abstrakten OOP-Query-Builders einbeziehen.

                Aber, wie gesagt, ich würde wohl vor allem die Methode anders anlegen.

                Kommentar


                • #83
                  Zitat von mermshaus Beitrag anzeigen
                  Ich finde die Methode insgesamt etwas seltsam konzipiert und auch den Namen missverständlich. Ich würde erwarten, einen Datensatz als nicht-skalare Struktur zu erhalten.
                  Sorry, ich hatte nicht drueber nachgedacht, dass vielleicht nicht sofort klar ist, was die 3 Methoden machen: fetchOne: einzelnes Feld; fetchAssoc: key/value-array; fetchAssocList => array[key/value-array]. Erst wenn man das weiss, ergibt das einen Sinn. Sorry!


                  Zitat von mermshaus Beitrag anzeigen
                  Das Argument, beispielsweise try/catch zu umgehen, um die Performance zu steigern, finde ich kaum haltbar, wenn wir den Kontext eines abstrakten OOP-Query-Builders einbeziehen.
                  Das habe ich so nicht sagen wollen. Es mag in der Theorie so sein, dass fetchOne in diesem Beispiel eine Exception werfen sollte, wenn versucht einen Feld-Wert zu lesen, dessen Datensatz es nicht gibt. In der Praxis ist das jedoch unerheblich. Praktisch immer.

                  Kommentar


                  • #84
                    Aber genau das dürfte doch unter Fehler fallen und damit eine Exception werfen?!

                    SELECT nichtvorhanden FROM foo.

                    Das Problem ist IMHO die Chain-Struktur, die einen einzigen Vorgang simuliert, wo doch zwei (1: Query, 2: Fetch) passieren. Die zu einem Vorgang vereinen kann man machen (z.B. in einer spezialisierten Methode mit definierten (Fehler-)Rückgabewerten für bestimmte Ergebnisse, aber in einem generischen Ansatz macht das IMHO keinen Sinn. Und funktioniert auch nur, weil man auf das Absprungverhalten von Exceptions vertraut. Das deutet m.E. schon darauf hin, dass das ein Fehlansatz ist.
                    [COLOR="#F5F5FF"]--[/COLOR]
                    [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                    [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                    [COLOR="#F5F5FF"]
                    --[/COLOR]

                    Kommentar


                    • #85
                      Zitat von rkr Beitrag anzeigen
                      Sorry, ich hatte nicht drueber nachgedacht, dass vielleicht nicht sofort klar ist, was die 3 Methoden machen: fetchOne: einzelnes Feld; fetchAssoc: key/value-array; fetchAssocList => array[key/value-array]. Erst wenn man das weiss, ergibt das einen Sinn. Sorry!
                      Erklärt hattest du es ja in einem der vorherigen Posts. Wenn man es weiß, weiß man es. Logisch. Wenn du weißt, dass push() Dateien schreibt und pull() Dateien liest, verwirren dich die Namen auch nicht (über Gebühr). Dennoch sind die Funktionen natürlich ungeschickt benannt, weil da die meisten Leser erst mal eine andere Semantik im Kopf haben dürften (was mit Stacks etwa). So meinte ich das.

                      Einen Alternativvorschlag für einen Methodennamen habe ich nicht, auch weil ich die Methode eben nicht so designen würde. (Zumindest spontan nicht.)

                      Das habe ich so nicht sagen wollen. Es mag in der Theorie so sein, dass fetchOne in diesem Beispiel eine Exception werfen sollte, wenn versucht einen Feld-Wert zu lesen, dessen Datensatz es nicht gibt. In der Praxis ist das jedoch unerheblich. Praktisch immer.
                      Mein Gedanke dazu war auch: Wie oft provoziert ein Entwickler denn eine null-Rückgabe, die nicht der korrekte Wert, sondern ein „Fehler“/„kein Datensatz“ ist? Also, wie häufig würde eine entsprechende Exception geworfen?

                      Für mich klingt das so, als würde die Methode ständig für irgendwas zweckentfremdet, für das sie gar nicht gedacht ist. Etwa für Existenzchecks oder dergleichen (Pseudocode):

                      PHP-Code:
                      if (null === $db->select(['id'])->from('table')->where(['id' => $id])->fetchOne()) {
                          
                      // Eintrag mit $id existiert nicht

                      Wenn der gesamte Code voll von so was ist, kann ich nachvollziehen, dass fetchOne() nicht plötzlich eine Exception werfen soll. Ansonsten sehe ich das Problem damit nicht.

                      Kommentar


                      • #86
                        @nikosch
                        Würde ich ein allgemeines Framework für alle Fälle entwickeln, würde ich dir recht geben. Nun ist mein Framework vor allem für Geschäftsanwendungen ausgelegt. Da braucht man diese kleinteilige Differenzierung nicht. Würde ich das, was ich jetzt macht mit einem ZendFw machen, würde ich mir doch auch wieder Wrapper schreiben, welche die unnötige Komplexität wieder vereinfachen. Schließlich will ich mich so wenig wie möglich wiederholen.

                        Zitat von nikosch Beitrag anzeigen
                        SELECT nichtvorhanden FROM foo
                        Eben das macht man ja praktisch nie. Eher sowas wie SELECT SUM(value) FROM table

                        Zitat von mermshaus Beitrag anzeigen
                        PHP-Code:
                        if (null === $db->select(['id'])->from('table')->where(['id' => $id])->fetchOne()) {
                            
                        // Eintrag mit $id existiert nicht

                        Dann eher SELECT COUNT(id) FROM table WHERE id=?

                        OT: Hat wer tapatalk? Ist das gut?

                        Kommentar


                        • #87
                          Eben das macht man ja praktisch nie.
                          Häh? Wieso macht man das nie?
                          Dann eher SELECT COUNT(id) FROM table WHERE id=?
                          Dabei kann ich genauso ein Feld falsch angeben. Und was liefert die Methode dann? Eine Exception.
                          [COLOR="#F5F5FF"]--[/COLOR]
                          [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                          [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                          [COLOR="#F5F5FF"]
                          --[/COLOR]

                          Kommentar


                          • #88
                            Zitat von nikosch Beitrag anzeigen
                            Häh? Wieso macht man das nie?
                            Ich kann mir gerade keinen Fall vorstellen, wo ich ein einzelnes Feld aus einer Datenbank auslesen möchte und Gefahr laufen könnte, dass es diesen Datensatz nicht gibt.


                            Zitat von nikosch Beitrag anzeigen
                            Dabei kann ich genauso ein Feld falsch angeben. Und was liefert die Methode dann? Eine Exception.
                            Jetzt vergleichst du Äpfel mit Birnen. Diese Art von Fehler wäre außerdem nicht mal eine "Ausnahme".

                            Kommentar


                            • #89
                              Ich kann mir gerade keinen Fall vorstellen, wo ich ein einzelnes Feld aus einer Datenbank auslesen möchte und Gefahr laufen könnte, dass es diesen Datensatz nicht gibt.
                              Herrjeh, ich rede schon seit drei Postings von einem Feld (spalte) das es nicht gibt. Nicht von einem Datensatz. Ein fehlender Datensatz würde ja keine Exception erzeugen.
                              [COLOR="#F5F5FF"]--[/COLOR]
                              [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                              [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                              [COLOR="#F5F5FF"]
                              --[/COLOR]

                              Kommentar


                              • #90
                                Zitat von nikosch Beitrag anzeigen
                                Herrjeh, ich rede schon seit drei Postings von einem Feld (spalte) das es nicht gibt. Nicht von einem Datensatz. Ein fehlender Datensatz würde ja keine Exception erzeugen.
                                Interessant. Ich bin die ganze Zeit davon ausgegangen, du wuerdest einen Datensatz meinen. Bzw. den Wert einer Spalte, dessen Datensatz es nicht gibt.

                                Und ja, eine nicht vorhandene Spalte sollte eine Exception werfen. Sollte aber schon zur Entwicklungszeit irgendwie auffallen!

                                Kommentar

                                Lädt...
                                X