Re(15): SQL Server Synchronisation
Geizhals » Forum » Programmierung » SQL Server Synchronisation (47 Beiträge, 314 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
.  Re: SQL Server Synchronisation  (Pervasive am 06.03.2007, 18:13:20)
..  Re(2): SQL Server Synchronisation  (MidiFan am 06.03.2007, 18:14:56)
...  Re(3): SQL Server Synchronisation  (Pervasive am 06.03.2007, 18:15:19)
.  Re: SQL Server Synchronisation  (Ardjan am 06.03.2007, 21:19:31)
..  Re(2): SQL Server Synchronisation  (Pervasive am 06.03.2007, 21:21:40)
...  Re(3): SQL Server Synchronisation  (MidiFan am 06.03.2007, 21:26:29)
....  Re(4): SQL Server Synchronisation  (Pervasive am 06.03.2007, 21:27:36)
...  Re(3): SQL Server Synchronisation  (Ardjan am 06.03.2007, 21:32:16)
....  Re(4): SQL Server Synchronisation  (Pervasive am 06.03.2007, 21:33:16)
.....  Re(5): SQL Server Synchronisation  (Ardjan am 06.03.2007, 21:39:03)
......  Re(6): SQL Server Synchronisation  (Pervasive am 06.03.2007, 21:44:20)
.......  Re(7): SQL Server Synchronisation  (Ardjan am 06.03.2007, 21:46:12)
........  Re(8): SQL Server Synchronisation  (Pervasive am 06.03.2007, 21:47:52)
.........  Re(9): SQL Server Synchronisation  (Ardjan am 07.03.2007, 10:08:45)
..........  Re(10): SQL Server Synchronisation  (googleDork am 07.03.2007, 11:05:56)
...........  Re(11): SQL Server Synchronisation  (Ardjan am 07.03.2007, 11:20:23)
......  Re(6): SQL Server Synchronisation  (Somnatic am 06.03.2007, 22:01:02)
.......  Re(7): SQL Server Synchronisation  (Ardjan am 06.03.2007, 22:31:36)
........  Re(8): SQL Server Synchronisation  (Somnatic am 06.03.2007, 22:36:45)
.......  Re(7): SQL Server Synchronisation  (Cereal_Poster am 07.03.2007, 10:37:10)
........  Re(8): SQL Server Synchronisation  (Somnatic am 07.03.2007, 11:16:29)
.........  Re(9): SQL Server Synchronisation  (Cereal_Poster am 07.03.2007, 11:26:31)
..........  Re(10): SQL Server Synchronisation  (Somnatic am 07.03.2007, 11:28:27)
...........  Re(11): SQL Server Synchronisation  (Cereal_Poster am 07.03.2007, 11:34:00)
............  Re(12): SQL Server Synchronisation  (Somnatic am 07.03.2007, 11:43:53)
.............  Re(13): SQL Server Synchronisation  (googleDork am 07.03.2007, 14:02:09)
..............  Re(14): SQL Server Synchronisation  (Cereal_Poster am 07.03.2007, 14:09:18)
...............
Re(15): SQL Server Synchronisation
07.03.2007, 14:34:46
Sorry...

Vielleicht ein anderes Beispiel:
Angenommen, du nimmst guten, alten C-Code (der nun freilich als unakzeptabler legacy-Prozedural-Code bezeichnet wird) - dann hast du oft Konstrukte drin (wieder Pseudocode) wie

Spieler * machwas(char *name, ...) 
{
    buffer *b, *c;
    if (!(b = malloc(100)) {        // 100 Bytes f. b anfordern
        schreib_fehler("Out of Memory");
         return NULL;
    }
    if (!machWasAnderes(name)) {
        free(b);   // Bytes von b wieder freigeben
         schreib_fehler("was anderes klappte nicht");
         return NULL;
    }
   ....
   return b;           // b zurückgeben.
}


Vorteil:
Genau dort, wo ein Fehler passiert (das sind die "!"-Konstrukte) passiert die Fehlerbehandlung. Dir kann nichts durchrutschen, ....

Nachteil:
Wenn man auf das "free(b)" vergißt, hast du ein MemoryLeak geschaffen... Was ja öfters mal passierte

Lösungsansatz:
try { Mach so Einiges - fordere auch Ressourcen an, ... } catch { Reagiere auf Fehler } finally { gib alle Ressourcen wieder frei }

Klingt an sich ja absolut sinnvoll - und drum haben try/catch-Blöcke durchaus ihre Berechtigung.

Das Problem ist dabei - aus meiner Sicht(!) - daß die Fehlerbehandlung nicht gleich dort stattfindet, wo der Fehler passiert - sondern zeitlich versetzt. Dadurch kann Dir meiner Meinung nach oft auch leichter was durchrutschen als vorher...

So war auch mein Spielerbeispiel zu sehen:
Da waren 3 Schritte drin:
1.) Lege einen Spieler an
2.) Ordne ihn einem Team zu
3.) Setze seine Punkte auf 0
4.) Liefere den Spieler zurück

-- Wenn was nicht klappt - liefere Null zurück. (Das Setzen des Spielers auf NULL läßt seine Referenz verschwinden, wenn keine Referenz mehr existiert, wird er (irgendwann) wirklich gelöscht... Daher  sieht der Code gut aus. (Java-Beispiel, AFAIK ist es in C# ähnlich.)

Wenn Du über so einen Code stolperst, mußt Du Dir /immer/ für jede Zeile des try-Blocks überlegen, ob das paßt.
Du beginnst also:
Wenn (1) nicht funktioniert - Dann wurde eh kein Spieler angelegt, wir liefern NULL zurück - paßt.
Wenn (2) nicht funktioniert - Dann wurde er keinem Team zugeordnet, wir setzen eh im catch() den Pointer auf NULL, dadurch wird die einzige Referenz eliminiert - paßt.
Wenn (3) nicht funktioniert... Dann wurde der Spieler aber schon einem Team in (2) zugeordnet - dann hat das Team eine Referenz, die es wohl nicht haben sollte. Dadurch wird der Speicher nicht freigegeben - und das Team hat einen ungültigen Spieler drinnen... Wenn es /irgendwann/ beim Schreiben dein Programm aufstellt, weil Du eine Spielerliste der Teams ausgeben willst... Findest Du dann auf die schnelle den Fehler, der hier passierte ??? Also ich brauche meistens laaange :-)

Der Fehler war in diesem Beispiel die Reihenfolge...
1.) Lege einen Spieler an
2.) Setze seine Punkte auf 0
3.) Ordne ihn einem Team zu
wäre richtig gewesen :-)

Meiner Meinung nach sind try/catch-Blöcke oftmals weit schwieriger zu debuggen... Weil Du, wenn du gerade im catch()-Block bist Dir Fehler überlegen mußt, die ganz wo anders haben passieren können...

Drum setze ich try/catch zwar schon gerne ein - aber eben nur sparsam.

Antworten PM Alle Chronologisch Zum Vorgänger
 
Melden nicht möglich
...............  Re(15): SQL Server Synchronisation  (Somnatic am 07.03.2007, 15:48:28)
..............  Re(14): SQL Server Synchronisation  (Somnatic am 07.03.2007, 15:48:00)
...............  Re(15): SQL Server Synchronisation  (googleDork am 07.03.2007, 17:24:12)
......  Re(6): SQL Server Synchronisation  (googleDork am 07.03.2007, 11:00:18)
.......  Re(7): SQL Server Synchronisation  (Ardjan am 07.03.2007, 11:04:26)
.......  Re(7): SQL Server Synchronisation  (Cereal_Poster am 07.03.2007, 11:27:51)
........  Re(8): SQL Server Synchronisation  (googleDork am 07.03.2007, 11:32:50)
.........  Re(9): SQL Server Synchronisation  (Cereal_Poster am 07.03.2007, 11:35:35)
..........  Re(10): SQL Server Synchronisation  (googleDork am 07.03.2007, 14:04:11)
.......  Re(7): SQL Server Synchronisation  (Ardjan am 07.03.2007, 14:54:33)
........  Re(8): SQL Server Synchronisation  (googleDork am 07.03.2007, 15:00:41)
.........  Re(9): SQL Server Synchronisation  (Ardjan am 07.03.2007, 16:01:39)
.....  Re(5): SQL Server Synchronisation  (MidiFan am 06.03.2007, 21:51:04)
......  Re(6): SQL Server Synchronisation  (Pervasive am 06.03.2007, 21:54:19)
.  Re: SQL Server Synchronisation  (googleDork am 07.03.2007, 11:11:36)
..  Re(2): SQL Server Synchronisation  (MidiFan am 07.03.2007, 12:48:21)
...  Re(3): SQL Server Synchronisation  (googleDork am 07.03.2007, 14:54:20)
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung