![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 111 Pomógł: 1 Dołączył: 24.12.2013 Ostrzeżenie: (0%) ![]() ![]() |
Czesc wszystkim.
Mam 2 pytanai dotyczace spojnosci kodu i parametrow: Otoz pisze klase do obslugi logow, ktora ma pozwalac na zapisywanie ich w plikach, bazie danych czy przesylanie do sysloga, w zaleznosci od wybranego poziomu logowania. Dzieki temu bledy moga trafic do innego miejsca niz ostrzezenia. W oby przypadkach moze to byc rozna baza danych, badz rozne pliki. Tak wiec, pierwsze klaska w ktorej bede zapisywal logi do plikow musi wiedziec do jakiego pliku je zapisac, natomiast klasa logujaca zdarzenia w bazie musi wiedziec w jakiej bazie i jakiej tabeli sa przechowywane. To sprawia ze parametry konfiguracyjne beda nie tylko rozne, ale roznic bedzie sie takze ich ilosc. (plik - nazwa pliku; DB - baza, tabela). Chcialem aby w obu przypadkach, opcje byly przekazywane w formie tablicy do konstruktora:
I nastepnie szukac w $config['filename'], $config['db'], $config['table'] itp. Wywolanie konstruktora byloby wowczas takie samo. Pytanie nr 1 brzmi: czy to dobre podejscie? W sytuacji gdyby np sciezka do pliku nie zostala podana, chcialbym rzucic wyjatek mowiacy o tym, ze do konstruktora zostala przekazana nieprawidlowa konfiguracja. Tutaj jednak rodzi sie drugie pytanie: Otoz wyobrazam sobie w przyszlosci jakis panel administracyjny w ktorym bedzie mozna wybrac ze system ma logowac bledy do pliku lub bazy i po wybraniu odpowiedniej opcji, uzytkownik dostanie odpowiednie pola do wyboru. Skad aplikacja ma wiedziec ze 1 konstruktor czeka na $config['filename'] a drugi na $config['db'] i $config['table'] ? Ostatnie pytanie brzmi: Jak najlepiej zapewnic takiej klasie dostep do bazy danych? Powinna ona w parametrze $config['db'] dostac DSNa i nawiazac polaczenie do bazy? A moze skorzystac z tego samego polaczenia co cala aplikacja? Co jesli to beda 2 rozne bazy? Moze powinien pierw sprawdzac czy w $config['db'] jest obiekt klasy Database i wtedy operowac na nim, a jesli nie, sprawdzic inna opcje - przykladowo $config['dsn'] i nawiazac nowe polaczenie? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
No dobra... No to tak, Piszesz sobie wpierw klasy Wrappera czyli klasę per metodę zapisu np. file log, syslog, DB z interface np. LogWrapperInterface.
Potem piszesz sobie główną klasę do której za pomocą metody np. addWrapper() będziesz dodawał obiekty klasy tworząc tym samym zbiór kolekcji. (dla każego wrappera podajesz oddzielnie konfiguracje) Potem wywołując metodę CustomLogger->info('aonsfdasdf'); lecisz po każdym elemencie kolekcji (wrapperach) i odpalasz na nich metodę info() odpowiednio zapisując gdzie trzeba. Tak mega skrótowo. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 11.10.2025 - 01:30 |