Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mvc][model] Iteratory
Vengeance
post
Post #1





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

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


Witam. Moje pytanie jest następujące...

czy lepiej będzie oprzeć model (np. taki NewsContainer) na metodach w stylu:
getNewsByID()
getAllNews()
deleteNewsByID()

czy moze lepiej wszystko oprogramowac jako Iteratory (oczywiscie w role wchodzi tylko php5) i w php operowac na bazie sql jak na normalnych tablicach.

Owszem ladnie wyglada to drugie rozwiazanie... jednak probowalem je 'wdrazac' i szlo mi bardzo ciezko :/

Co wy o tym sadzicie.
Go to the top of the page
+Quote Post
hwao
post
Post #2


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Wg mnie powinienes wprowadzac wg czego jako argument najlepiej jako tablica bardzo elastyczne i sie nie napiszesz za duzo (rozne zachodza potrzebny wtedy sie przydaje ze mozna dac tablice)
np
array( 'id' => 1 );
Wybierze newsa z id 1
array( 'id' => 3, 'user' => 'hwao' )
Wybierrze cos z id 3 i 2 warunek ze musi jeszcze byc user hwao :-)
Go to the top of the page
+Quote Post
Vengeance
post
Post #3





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

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


hwao: troche źle mnie zrozumiałeś (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
  1. <?php
  2. $newsList = new NewsContainer();
  3.  
  4. // Pobiera newsa o ID 1
  5. $news = $newsList[1];
  6.  
  7. // Edytuje pobranego newsa.
  8. $news['title'] = 'Inny tytul';
  9.  
  10. // Usuwa newsa o ID 2
  11. unset($newsList[2]); 
  12. ?>

I wszystko to automatycznie wprowadza odpowiednie zmiany w bazie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Da się to uzyskać np. poprzez interfejs ArrayAccess
Go to the top of the page
+Quote Post
hawk
post
Post #4





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


To tutaj nie masz iteratorów tylko ArrayAccess właściwie. IMHO twój przykład jest technicznie fajny, ale mało zrozumiały - przegięcie z bajerami. Ja bym wolał:
  1. <?php
  2. $news = $newsList->findById(1);
  3.  
  4. $news->title = 'foo';
  5. // ... lub ...
  6. $news->setTitle('foo');
  7.  
  8. $newsList->delete(1);
  9. ?>


$news['title'] jest możliwe ale bardzo zakręcone i tak naprawdę nic nie daje poza dezorientacją. $news->title jest już znacznie lepsze, jeżeli nie chcemy pisać metody setXXX() dla każdego atrybutu. Gorzej, jeżeli ustawienie tego atrybutu wymaga jakiś nietrywialnych operacji - wtedy w metodzie __set() musiałbyś mieć paskudnego switcha.

Natomiast usuwanie realizowane za pomocę destruktorów jest bardzo ciekawe, ale trochę bym się obawiał. Powody:
1) Destruktory będą wywoływane same z siebie na końcu skryptu.
2) Zawsze można utworzyć obiekt $news ręcznie (czyli bez odpowiednika w bazie danych), i co wtedy zrobi destruktor?
3) Jeżeli wystąpi jakiś problem przy zapytaniu DELETE, to jak poinformować użytkownika? Destruktor rzucający wyjątek?

Chociaż, jeżeli uda się ominąć trudności techniczne, jest to bardzo ciekawy pomysł. Rozwiązuje problem istnienia obiektu $news po usunięciu newsa - łączy usunięcie obiektu z usunięciem rekordu z bazy danych, a to jest duża zaleta.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 05:15