Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dispatcher i Model i DAO
Forum PHP.pl > Forum > PHP > Pro > Archiwum Pro
Turgon
Otóż ostatnio mam problem. Postanowiłem, że podczas uruchamiania aplikacji do dyspozytora jest przekazywana path do modelów i kontrolerów. Otóż mam mały problem. Doskonale wie każdy do czego to służy. Jednak problem tkwi co ten model musi zawierać jakie funkcje? Jak też przekazywać obiekt dostępu do bazy danych w aplikacji questionmark.gif
EDIT///
Zrobiłem rejestr systemowy frameworka. Zawierać będzie ten głupi DB object biggrin.gif....
Prph
Wiele osob pyta o model.

Model nie musi zawierac zadnych ustalonych metod! Jest to bardzo wazne.
Model nie jest czyms standardowym, tak jak kontroler, a tym bardzi jak widok. Widok wiemy do czego sluzy - wyswietla nam dane. Nie pobiera ich z bazy, nie wysyla nam maili. On tylko wyswietla (z czym wiaze sie kilka metod).

Model natomiast moze byc naprawde rozny. Moze pobierac/zapisywac dane z bazy, plikow XML, albo z innego serwera. Co da Ci nakazanie kaZdemu modelowi metody run, execute albo cos innego? nic!

Np model nowos moze miec metody: show, save, getTitle itp.

I oczywiscie, zeby wygodnie sie programowala to model moze dziedziczyc z jakiesgos bazowego, ktoru ma juz ustalone np polaczenie z baza danych.

Adrian.
Turgon
No właśnie teraz na to wpadłem smile.gif . Po prostu wrzucę to przy pomocy rejestru i konstruktor te podstawowe narędzia dla modelu...
Speedy
W jednym temacie na tym forum pisałem, że chcę narzucić wszystkim klasom, które pełnią rolę modelu jednakowe metody za pośrednictwem interfejsu i się na tym nieźle przejechałem tongue.gif. Na dłuższą metę staje się to bardzo niewygodne. Lepiej jest stworzyć więcej interfejsów oddzielnych dla poszczególnych modeli i mieć spokój. Jak Prph wspomniał, nie ma sensu tworzyć uniwersalnego modelu. Można conajwyżej stworzyć klasę zawierającą jakieś metody, z których korzystają wszystkie modele i te modele będą z niej dziedziczyć.
Prph
@Speedy dobrze prawisz. Ja bym tylko nie dawal tych interfejsow. To znaczy nie widze zadnego sensu. Ale pomysl np. z metoda getDB() ktora zwraca nam obiekt bazy jest nak najbradziej wygodny smile.gif

Adrian.
Denver
Ja, zamiast getDB(), preferuję w konstruktorze klasy, po której dziedziczą wszystkie klasy modelu, zapamiętać referencję do klasy obsługującej szablony albo kontrolera. Przykładowo:

  1. <?php
  2. public function __construct()
  3. {
  4. $this -> application = Application::GetInstance();
  5. $this -> tpl = $this -> application -> tpl;
  6. $this -> some_class = $this -> application -> some_class;
  7. }
  8. ?>


Dzięki temu nigdzie wewnątrz klasy modelu nie muszę wywoływać ::GetInstance(), gdyż mam to rozwiązane dużo wygodniej.
Prph
Szablon w modelu? blinksmiley.gif
Poza tym... majac na mysli getDB() mialem na mysli metode modelu. Czyli to samo co proponujesz Ty. Kod:

  1. <?php
  2. class Opt_Model_MySQL
  3. {
  4. public function __construct()
  5. {
  6. $aParameters = array
  7. (
  8. 'host'  => 'localhost',
  9. 'user'  => '',
  10. 'password' => '',
  11. 'database' => ''
  12. );
  13.  
  14. $this->_oDatabase = new Rapide_Database_MySQL($aParameters, true);
  15. }
  16.  
  17. public function getDB()
  18. {
  19. return $this->_oDatabase;
  20. }
  21. }
  22. ?>
Denver
Fakt, zbytnio pospieszyłem się z tym modelem i szablonami. Oczywiście chodziło mi o klasę, po której dziedziczą wszystkie klasy akcji, a nie modelu. Przykład: repozytrium mojego projektu Aedo - wszelkie akcje umieszczone w /core/modules/ dziedziczą po klasie /core/lib/class.Actions.php, dzięki czemu po otrzymaniu danych z modelu nie muszą wywoływać żadnych wzorców typu singleton. Bardzo przyjemne i przejrzyste rozwiązanie, polecam.
Turgon
Dobrze ja jednak zamiast getDB wolę winksmiley.jpg . W konstruktorze.
$this->db = registry('db');
I voilla....
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.