Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Active Record + biblioteka funkcji a połączenia, z bazą danych (trochę filozoficzne)
Aztech
post 16.03.2006, 16:34:50
Post #1





Grupa: Zarejestrowani
Postów: 276
Pomógł: 3
Dołączył: 22.10.2003
Skąd: Wrocław

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


Zagadnienie, które mnie nurtuje to jak zorganiwazować połączenia z bazą danych w bibliotekach (zbiorach funkcji) a mianowicie dokładnie
(*) klasy reprezentujące rekordy poszczególnych tabel zgodnie z filozofią Active Record posiadają klasę bazową baseClass, która w konstruktorze wywołuje połączenie z bazą danych (to jest dobre biggrin.gif)
(*) teraz przystępuję do pisania zbioru funkcji, łączonych w biblioteki, będą to funkcje zwracające z bazy MySQL różne tablice z danymi np:
  1. <?php
  2.  
  3. function getNotActivePrivateGroups() {/* kod */}
  4. function getActivePrivateGroups() {/* kod */}
  5. function getPrivateGroupUsersList() { /* kod */}
  6.  
  7. ?>

itp

Pytanie brzmi: o ile dla klas połączenie było realizowne w kontruktorze, to jak lepiej zrobić to dla zbioruy takich funkcji bibliotecznych.

1) czy lepiej w ciele każdej z tej funkcji łączyć się i rozłączać z bazą danych
2) czy może lepsze jest zastosowanie parametru przekazującego obiekt PDO
  1. <?php
  2.  
  3.  function getNotActivePrivateGroups(dbPDOConn){/* kod */}
  4.  
  5. ?>

3) a może nieładnie skorzystać z globalnego obiektu odpowiedzialnego za połączenie?

Zastanawiam się jak się będzie to miało do wydajności (szybkości działania) aplikacji w momencie gdy będą wykonywane duże ilości takich zapytań w jednym skrypcie? Jak państwo rozwiązujecie takie problemy?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Aztech
post 16.03.2006, 20:09:43
Post #2





Grupa: Zarejestrowani
Postów: 276
Pomógł: 3
Dołączył: 22.10.2003
Skąd: Wrocław

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


@Matid, żle mnie zrozumiałeś (albo ja wyraziłem się niezbyt precyzyjnie ?), wzorzec Active Record nie ma nic wspólnego ze zbiorami funkcji, chodziło mi tylko o pokazanie, że w tworzonym obiekcie, w jego konstruktorze wywołuję połączenie z bazą danych, przestaje istnieć obiekt, przestaje istnieć połączenie.
Jak się zapewnie domyślasz funkcje, które tutaj przytoczyłem, będą znajdowały sie w panelu administracyjnym. Admin/użytkownik pobiera np informacje o nieaktywowanych (=niezaakdeptowanych przez niego) forach, następnie gdy zaznaczy któreś z nich dopiero wtedy "do gry" wejdzie obiekt wg wzorca Active Record, który wczyta dane (jeden wiersz) dotyczace tego forum, zaktualizuje pole odpowiedzialne za aktywowanie ot tyle. Tyle w kwesti wyjaśnień (tutaj swego czasu gdy zaczynałem przygode z php5 uświadamiali mnie o wzorcach)

Teraz miałbym prośbę, do osób, które się w tych wątkach już wypowiadały (albo zamierzają biggrin.gif) i mają spore doświadczenie w większych projektach, czy mogłyby podrzucić linki do dobrych kursów, artykułów dotyczących wzorca Singleton oraz Registry, chodzi mi o sprawdzone, dobre źródło informacji na temat w/w do których sami często sięgacie.

Jeśli nie sprawi Wam to problemu, może pokazalibyście jak macie rozwiązane w swoich frameworkach poruszone przeze mnie kwestie dotyczace połączeń z bazą?

Poniżej moja klasa bazowa, po której dziedziczą wszystkie następne klasy w tym te korzystające z wzorca Active Record

  1. <?php
  2.  
  3. /**
  4.  * @author Tomasz Suchanek
  5.  * @copyright Tomasz Suchanek 
  6.  * @final 
  7.  */
  8.  
  9. #includy
  10. require_once('config.inc.php');
  11. require_once("$RBX_CORE/includes/errors.inc.php");
  12. require_once("$RBX_CORE/includes/constant.inc.php");
  13.  
  14. /**
  15.  * Klasa bazowa dla wszystkich klas
  16.  *
  17.  */
  18. abstract class BaseClass {
  19.  
  20.  
  21. /**
  22.    * Połaczenie z bazą danych
  23.    *
  24.    * @var array PRzechowuje identyfiaktor połączenia z bazą danych.
  25.    * @access private
  26.    */
  27. private $db;
  28.  
  29. /**
  30.    * Wynik zapytania
  31.    *
  32.    * @var array Wynik zapytania skierowanego do bazy
  33.    * @access private  
  34.    */
  35. private $result;
  36.  
  37. /**
  38.    * Zapytanie do bazy
  39.    *
  40.    * @var string Zapytanie kierowane do bazy
  41.    * @access private
  42.    */
  43. private $sql;
  44.  
  45. /**
  46.    * Konstruktor
  47.    *
  48.    * @param array $rbx_db Tablica zawierająca dane potrzebne do połączenia się z b
    azą danych
  49.    * @access public
  50.    */
  51. public function __construct($rbx_db){
  52.  
  53. # połącz z bazą typu MySQL  
  54. $this->db = new PDO("mysql:host=".$rbx_db["host"].";dbname=".$rbx_db["name"], $rbx_db["user"], $rbx_db["pass"]);
  55. # raportuj wszystkie błędy z AdoDB
  56. $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  57.  
  58. # raportuj wszysrkie błedy z php 
  59. error_reporting(E_ALL);  
  60.  
  61. }
  62.  
  63. /**
  64.    * Ustawia wartości domyślne dla pól prywatnych klasy
  65.    * 
  66.    * @abstract 
  67.    *
  68.    */
  69.  abstract public function setDefault();
  70.  
  71. /**
  72.    * Zwróc obiekt połączenia z bazą
  73.    *
  74.    * @return array Tablica z identyfiaktorem połączenia z bazą danych
  75.    * @access public
  76.    */  
  77. public function getDB(){
  78. return $this->db;
  79. }
  80.  
  81. /**
  82.    * Zwraca rezultat zapytania
  83.    *
  84.    * @return array Tablica zawierająca rezultat zapytania
  85.    * @access public
  86.    */
  87. public function getResult(){
  88. return $this->result;
  89. }
  90.  
  91. /**
  92.    * Ustaw zapytanie sql
  93.    *
  94.    * @param string $sql Zapytanie SQL
  95.    * @access public  
  96.    */
  97. public function setSql($sql) {
  98. $this->sql = $sql;
  99. }
  100.  
  101.  
  102. /**
  103.    * Zwróć treść zapytania
  104.    *  
  105.    * @return string $sql Zapytanie SQL
  106.    */
  107. public function getSql() {
  108. return $this->sql;
  109. }
  110.  
  111. /**
  112.    * Zwróć wyjątek jeśli rezultat zapytania jest pusty
  113.    * 
  114.    * @return true jeśli wynik zapytania jest poprawny
  115.    * @access public
  116.    */
  117. public function checkResult() {
  118. if ($this->result) {  
  119. return true;
  120. }
  121. else {  
  122. return false;
  123. }
  124. }  
  125.  
  126. /**
  127.    * Wywołanie wszytkich metod związanych z wykonaniem zapytanie w jednej funkcji
  128.    * treść zapytania zostaje zapamiętana
  129.    *
  130.    * @param string $sql Zapytanie SQL
  131.    * @access public
  132.    * @return boolean
  133.    */
  134. public function doSQL($sql=""){
  135.  
  136. # gdy niepusty to zapisz zapytanie SQL
  137. if (!empty($sql)) $this->setSql($sql);
  138.  
  139. #wykonaj zapytanie i zapisz do wyników  
  140. $stmt = $this->db->prepare($this->getSql());
  141. // print_r($stmt);
  142. // echo "<br>";
  143. $stmt->execute();
  144. $this->result = $stmt->fetch(PDO::FETCH_ASSOC);
  145. // echo "<br> print result: ";
  146. // print_r($this->result);
  147. // echo "<br>";
  148. $this->checkResult();
  149. }
  150.  
  151. }
  152. ?>


Czekam na uwagi

Zdrawim

Ten post edytował Aztech 16.03.2006, 20:11:23
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 Wersja Lo-Fi Aktualny czas: 23.06.2025 - 12:14