bamboos
17.05.2004, 20:09:02
Na poczatek, przepraszam za brak polskich liter, ale jeszcze nie uporalem sie z klawiatura ;P
Jak w swoich aplikacjach rozwiazujecie obsluge bledow.
Powiedzmy, chce napisac skrypt do wysylania sms'ow:
[php:1:59e694bc36]<?php
class Error
{
f report();
}
class Socket
{
// klasa do obslugi socketow
var Error = new Error();
}
class Http
{
// do obslugi polaczenia z serwerem www
var Socket = new Socket();
var Error = new Error();
}
class Sms
{
// do wyslania smsa
var Http = new Http();
var Error = new Error();
}
?>[/php:1:59e694bc36]
Teraz, czy kazda klasa powinna miec "w sobie" zadeklarowana klase Error, ktora bedzie wyswietlala komunikaty i w razie bledow krytycznych przerywala dzialanie aplikacji. Czy moze wykozystac singletony (jesli dobrze zrozumielem ich idee):
Error::report(message, level);
Dobrze bylo by, aby Error wspolpracowalo z klasa Language (obsluga jezykow), ale to juz nie problem.
Pozatym, ktore bledy wyswietlac? Czy naprzyklad brak pliku konfiguracyjnego i w zwiazku z tym uzycie wartosci domyslnych jest bledem, o ktorym uzytkownik powinien wiedziec?!? Moze takie bledy logowac gdzies do pliku, zeby tylko admin mial do nich dostep...
Jak wy to wszystko widzicie i ktore rozwiazanie zazwyczaj wybieracie, bo ja jeszcze nie wypracowalem sobie metody i chetnie skozystal bym z dobrych rad.
lukaswoj
17.05.2004, 20:46:37
Ok a więc wg mnie.
Napewno pomysł z obiektem obsługującym błędy w każdej z klas jest zły bo nieoptymalny, przecież w zupełności wystarczy jeden obiekt obsługujący błędy.
Też nie jestem pewien czy do końca rozumiem ideę używania singletonów, ale wiem, że to sie "kręci" wokól utrzymywania tylko jednej instancji obiektu danej klasy, więc tutaj takie podejście będzie najbardziej prawidłowe.
Proponuję to zrobić również w ten sposób, aby obiekt obsłgujący błędy był tworzony dopiero jak wystąpi jakiś błąd. Skoro błędu może nie być to szkoda zasobów na obiekt do jego obsługi.
A co do wyświetlania, ja u siebie praktykuje różne poziomy logowania, podczas pisania skryptu napewno wszelkie informacje się przydadzą, ale już dla końcowego usera, powinno być tylko wyświetlane coś w stylu "Błąd krytyczny, dalsza praca niemożliwa" - a w tym samym momencie pełne informacje o błędzie wysyłane mogą być do pliku lub bazy danych.
Dla mało skomplikowanego skryptu wystarczy zwykły przełącznik, który powoduje nie wyświetlanie informacji szczegółowych o błędach, natomiast dla większych skryptów, można porobić różne poziomy zgłaszania i logowania błędów. Coś na wzór php'owego error_reporting().
Bakus
17.05.2004, 23:13:54
Najlepszym pomysłem jest nie tworzenie klasy a funkcji, która na podstawie przekazanego jej np. numeru błędu generowała by dalsze zdarzenia i kończyła wykonywanie skryptu...
Komunikaty błędów można przechowywać w osobnym pliku jako tablicę asocjacyjną... to rozwiązanie daje możliwość dodatkowo nadzorowania języków (wiele tablic z językami) i poziomów (różne pliki z danymi dla różnych poziomów)...
Takie rozwiązanie poza tym nie generuje kolejnej klasy... a jedynie jedną funkcję, która na dobrą sprawę odpowiada tylko za wczytanie odpowiedniego rekordu z tablicy w jakimś tam pliku... czyli w sumie musi zrealizować 3 zmienne - język, poziom błędu i treść komunikaty dla usera...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.