Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dispatcher i Model i DAO
Turgon
post 8.09.2006, 17:26:56
Post #1





Grupa: Zarejestrowani
Postów: 800
Pomógł: 0
Dołączył: 26.11.2005
Skąd: Nowy Sącz

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


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....

Ten post edytował Turgon 8.09.2006, 18:05:17


--------------------
Jah Music Is On My Mind !
Go to the top of the page
+Quote Post
Prph
post 8.09.2006, 20:37:58
Post #2





Grupa: Zarejestrowani
Postów: 338
Pomógł: 2
Dołączył: 4.03.2006
Skąd: Łódź

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


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.
Go to the top of the page
+Quote Post
Turgon
post 9.09.2006, 10:16:55
Post #3





Grupa: Zarejestrowani
Postów: 800
Pomógł: 0
Dołączył: 26.11.2005
Skąd: Nowy Sącz

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


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...


--------------------
Jah Music Is On My Mind !
Go to the top of the page
+Quote Post
Speedy
post 10.09.2006, 01:21:46
Post #4





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

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


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ć.


--------------------
Sygnatura niezgodna z regulaminem.
Go to the top of the page
+Quote Post
Prph
post 10.09.2006, 13:51:40
Post #5





Grupa: Zarejestrowani
Postów: 338
Pomógł: 2
Dołączył: 4.03.2006
Skąd: Łódź

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


@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.
Go to the top of the page
+Quote Post
Denver
post 10.09.2006, 15:28:19
Post #6





Grupa: Zarejestrowani
Postów: 132
Pomógł: 0
Dołączył: 24.09.2003
Skąd: Giżycko / Wrocław

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


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.


--------------------
Go to the top of the page
+Quote Post
Prph
post 10.09.2006, 17:27:05
Post #7





Grupa: Zarejestrowani
Postów: 338
Pomógł: 2
Dołączył: 4.03.2006
Skąd: Łódź

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


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. ?>
Go to the top of the page
+Quote Post
Denver
post 10.09.2006, 23:33:40
Post #8





Grupa: Zarejestrowani
Postów: 132
Pomógł: 0
Dołączył: 24.09.2003
Skąd: Giżycko / Wrocław

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


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.


--------------------
Go to the top of the page
+Quote Post
Turgon
post 12.09.2006, 18:07:00
Post #9





Grupa: Zarejestrowani
Postów: 800
Pomógł: 0
Dołączył: 26.11.2005
Skąd: Nowy Sącz

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


Dobrze ja jednak zamiast getDB wolę winksmiley.jpg . W konstruktorze.
$this->db = registry('db');
I voilla....


--------------------
Jah Music Is On My Mind !
Go to the top of the page
+Quote Post

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: 18.06.2024 - 21:52