Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: pytanie o związek między klasą odpowiedzialną za połączenie z bazą danych a resztą klas
Forum PHP.pl > Forum > PHP > Object-oriented programming
nieraczek
Moje pytanie wynika z ciekawości. Mamy klasę np. klasaPolaczenie bedaca singletonem odpowiadającą za łączenie z bazą danych, wykonywanie zapytań itd.. Klasa ta jest singletonem więc jest finalna więc nie mozna po niej dziedziczyc.
I mam pytanie czy Wy w innych klasach wymagających dostępu do bazy danych, np. w klasie klasaGaleria, która mogłaby robić różne rzeczy związane z obrazkami, w tym niektore wymagajace dostepu do bazy danych, tworzycie obiekt klasy klasaPolaczenie w konstruktorach takich klas jak np. w konstruktorze klasaGaleria czy postepujecie jakos inaczej ? smile.gif Bo ja tak robię i może robię wbrew jakimś standardom tongue.gif
nieraczek
Tak - nie używam MVC.
W opisanym przeze mnie sposobie nie muszę już tworzyć obiektu klasy klasaPolaczenie, wystarczy, że stworzę obiekt np. klasy klasaGaleria - więc zamiast tworzyć dwa obiekty - wystarczy jeden - nie wiem tylko czy to rozwiązanie jest ok smile.gif
ayeo
Witam!

Najprostsze rozwiązanie to wzorzec Singleton lub Registry.

Pozdrawiam!
dr_bonzo
Jesli na pewno (na 100%) bedziesz uzywal jednej bazy to mozesz zrobic singletona, wtedy taka galeria czy cokolwiek latwo sobie znajdzie obiekt polaczenia z baza.

Dla dwu i wiecej baz - zaczyna sie fajna zabawa, bo musisz wskazywac, ktorej bazy uzyc przy danej operacji (zaladowania, updejtu, kasowania, dodawania), obiekty musza wiedziec z ktorej bazy sa, itd. Wzorzec: http://martinfowler.com/eaaCatalog/unitOfWork.html ,


Przyklad dla Doctrine
http://209.85.129.132/search?q=cache:e3eTT...mp;client=opera


A w Propelu wyglada to tak (no chyba ze maja cos jeszcze - nie znam, nie zagladalem do dokumentacji)

http://www.lampjunkie.com/2008/04/using-mu...ny-with-propel/
  1. <?php
  2. $c = new Criteria();
  3. $articles = ArticlePeer::doSelect($c, Propel::getConnection('slave'));
  4.  
  5. // save an article in the master database (explicitly setting the connection name)
  6. $article = new Article();
  7. $article->setTitle('Symfony Rocks!!!');
  8.  
  9. $article->save(Propel::getConnection('propel');
  10. ?>


Cytat
W opisanym przeze mnie sposobie nie muszę już tworzyć obiektu klasy klasaPolaczenie, wystarczy, że stworzę obiekt np. klasy klasaGaleria - więc zamiast tworzyć dwa obiekty - wystarczy jeden - nie wiem tylko czy to rozwiązanie jest ok


I nie dziedzicz galeria po klasie bazy danych. Lepiej pobrac w niej singletona polaczenia z baza. Ten singleton sam sie polaczy przy pierwszym tworzeniu jego obiektu.

A co do dziedziczenia: stworz klase Core, gdzie wrzucisz wszystko: obsluge bazy, szablonow, model, akcje, sesje, wysylke emaili a potem dziedzicz Galeria extends Core - podoba ci sie to? a wlasnie w tym kierunku zmierzasz winksmiley.jpg
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.