Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wydajność
angerthor
post
Post #1





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 13.02.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Witam,

Jestem bardziej programistą Javy, jak PHP, dlatego nie jest pewien jaki sposób pisania kodu jest najbardziej wydajny.

Załóżmy, że mam obiekt komentarz, który w konstruktorze łączy się z bazą danych i pobiera z niej wszystkie wartości odnośnie danego komentarza, typu np. id_komentarz, tresc, autor no i id_artykul, czy id artykulu w bazie do którgo komentarz się odnosi.

I teraz, aby wydajnie pobierać dalsze informację odnośnie tego artykułu z poziomu klasy komentarz, mam jako pole pustą zmienną, która jest inicjalizowana raz, kiedy na obiekcie pola komentarz wywoła się metoda chcąca pobrać dodatkowe info odnośnie komentarza, np. getArticleTitle();. Inicjalizacja czyli wywołanie konstruktora z parametrem id, który łączy się z bazą danych i pobiera dane artykułu.

Zastanawiam się tylko, czy to jest dobre rozwiązanie pod względem wydajności i bezpieczeństwa.

Dzięki za wszelkie opinie
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


1. Takiej metody jak Comment::getArticleTitle() w ogóle nie powinno* być. Możesz utworzyć Comment::getArticle(), która zwróci obiekt artykułu powiązanego z danym komentarzem, a ten z kolei może udostępniać metodę Article::getTitle().
2. Generalnie próbujesz utworzyć ORMa - może warto by zapoznać się z już istniejącymi? Doctrine2 czerpie garściami z Hibernate, którego może już znasz - nie powinieneś mieć problemów ze zrozumieniem jego działania. Zresztą może po prostu warto użyć owego Doctrine (czy też innego ORMa) zamiast pisać od podstaw własnego?
3. Takie "późne pobranie" danych dot. artykułu, dopiero w momencie gdy są rzeczywiście potrzebne (tutaj: przy wywołaniu metody Comment::getArticle()) nazwa się Lazy Loading - i jest to świetne rozwiązanie gdy np. pobieramy 50 komentarzy przyporządkowanych do różnych artykułów, ale tylko w przypadku jednego komentarza chcemy uzyskać dostęp do artykułu powiązanego z nim.

* Jeżeli już, to powinna być tzw. metodą-proxy, tj.:
  1. public function getArticleTitle() {
  2. return $this->getArticle()->getTitle();
  3. }
Jednak w tym przypadku stworzenie takiej metody wydaje się być kompletnie bezpodstawne i niepotrzebne.

Ten post edytował Crozin 25.11.2010, 17:51:40
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 16.10.2025 - 16:20