Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 170 Pomógł: 4 Dołączył: 11.08.2006 Ostrzeżenie: (10%)
|
Witam (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
mam np taki oto kod:
i nasuwa się pytanie, co zrobić żeby tego tyle razy nie powtarzać ? mam jakąś tam klase do zarządzania Osobami i praktycznie w każdej metodzie musze powtarzać ten sam fragment kodu... jak wy to rozwiązujecie? czy poprostu zrobić dodatkową metodę do której będę przekazywać coś takiego:
choć to pewnie nia zawsze się sprawdzi... pisząc obiektowo raczej nie powinno się powtarzać kilka razy (DRY;)) jakieś rozwiązanie ? z góry dzięki za pomoc (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%)
|
Czy ja dobrze widzę, że łączysz się z bazą za każdym razem, gdy chcesz coś z niej pobrać? Jeśli tak, to czym prędzej skasuj ten kod i przepisz go porządnie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Z bazą skrypt powinien się łączyć jedynie raz i tyle. Odpadnie Ci przy okazji problem "powtarzania", do którego mam taką uwagę, że jest pewna granica, do której DRY ma zastosowanie.
|
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 170 Pomógł: 4 Dołączył: 11.08.2006 Ostrzeżenie: (10%)
|
Czy tak będzie lepiej ? :
|
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 17 Dołączył: 8.11.2008 Skąd: Libiąż Ostrzeżenie: (0%)
|
W __construct() też musisz mieć try ... catch() bo tak nakazuje manual (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) No i po wywołaniu zapytania powinieneś robić $row -> closeCursor(); a nie dopiero w destruktorze (uruchamia on się dopiero wtedy, kiedy niszczony jest obiekt/kończy działanie aplikacja)
|
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 46 Pomógł: 10 Dołączył: 30.06.2008 Ostrzeżenie: (0%)
|
Nazwa klasy wskazuje że jest to fabryka bo bardzo łatwo przerobić tą klasę tak żeby fabryką była (fabryka czyli klasa która serwuje różne obiekty w zależności od parametrów) i jeśli w projekcie korzystasz z więcej niż jednej bazy danych należałoby przekazać do metody PdoFactory::get() jeszcze jeden parametr dzięki któremu będziesz mógł uzyskać połączenie z określoną bazą danych Zaprezentowany wyżej kod jest implementacją wzorca projektowego o nazwie Singleton i sprawdza się bardzo do kodu który ma być dostępny w dowolnym miejscu twojego skryptu. Jest to tak naprawdę opakowana w klasę zmienna globalna dlatego radze nie nadużywać tego wzorca. Mając tak zdefiniowaną klasę obiekt klasy PDO pobierasz przez:
Metoda z twojego pierwszego postu może wyglądać teraz np tak:
albo obiekt klasy PDO pobrać już w samym konstruktorze i przypisać go do prywatnej składowej tej klasy. Pozwoliłem dodać sobie dwa komentarze do kodu na jego temat. Ten post edytował Methestel 8.04.2009, 17:43:29 |
|
|
|
![]() ![]() |
|
Aktualny czas: 20.12.2025 - 15:37 |