Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> MVC - model, swobodne rozwazania
.dragonfly
post
Post #1





Grupa: Zarejestrowani
Postów: 217
Pomógł: 0
Dołączył: 5.10.2003
Skąd: Londyn / UK

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


Buduje aplikacje oparta o MVC i w zwiazku z tym faktem doszedlem do pewnego rozwiazania. Teraz mam pytanie na ile jest ono trafne.

Jak wszyscy wiemy model ma za zadanie tylko operacje na danych. Czy dobrym rozwiazaniem jest zbudowanie modelu ktory odwoluje sie do "pod-modelow" (modulow) w nastepujacy sposob:


  1. <?php
  2.  
  3. /*
  4.  * W tym fragmencie kodu odwolujemy sie do modelu oraz sub-modulu user
  5.  * ktory operuje rzadaniami zwiazanymi z operacjami na uzytkowniku
  6.  */
  7. $this->model[user]->userProfile(1);
  8.  
  9.  
  10. ?>


Ladowanie modulu (metoda w klasie Model):

  1. <?php
  2.  
  3.  
  4.  
  5.  /**
  6. * Wybiera odpowiedni modul, includujac plik
  7. * @param $strModuleType 
  8. * @param $strModuleName
  9. * @param $strModuleVar
  10. * @return 
  11. */
  12. function loadModule( $strModuleType, $strModuleName, $strModuleVar = false )
  13. {
  14. if ( !$strModuleVar ) $strModuleVar = $strModuleName;
  15. require_once ( ENVIE_DIR . &#092;"modules\" . $strModuleType . \"envie.module.\" . $strModuleName . \"\" . $strModuleName . '.module.php' );
  16. $this->model[$strModuleVar] = new $strModuleName;
  17. } 
  18. ?>


Kazdy sub-modul jest "dzieckiem" (extends) klasy Model. Co sadzicie o takim rozwiazaniu
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
seaquest
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 790
Pomógł: 7
Dołączył: 6.02.2003
Skąd: Polska

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


Jest ono calkiem pozyteczne, bo ladujesz klasy np tylko w kernelu, aczkolwiek pociaga za soba pewne konsekwencje. Moim zdaniem ta zmienna powinna byc "prywatna" (jezeli php5) i dostep do niej powinien byc ograniczony przez zdefiniowane metody.
Go to the top of the page
+Quote Post
.dragonfly
post
Post #3





Grupa: Zarejestrowani
Postów: 217
Pomógł: 0
Dołączył: 5.10.2003
Skąd: Londyn / UK

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


@seaquest: Dokladnie tak jak powiedziales jest to juz rozwiazane. IMO przy takim rozwiazaniu aplkacja zyskuje nie tylko na przejrzystosci, ale przedewszyskim na wydajnosci.

Rozwiazanie jakie zaproponowalem jest moim zdaniem przydatne przy rozbudowanych aplikacjach i daje ciekawe mozliwosci rozbudowy.
Go to the top of the page
+Quote Post
hwao
post
Post #4


Developer


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




Uwaga czytanie ponizszego posta jest na wlasne ryzyko oglupienie spowodowane jego zawartosci merytoryczna(doslowna jak i ukryta) nie ponosze odpowiedzialnosc ;-) czytasz to na wlasna reke (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

A wiec... umnie ladowanie wyglada tak
  1. <?php
  2. //...,
  3. private function LoadModule( $strModule )
  4. {
  5.  //
  6.  $strModule = strtolower( $strModule );
  7.  
  8.  if( file_exists( DIR . 'core' . $strModule .'.class.php' ) )
  9.  {
  10. include( DIR . 'core' . $strModule .'.class.php' );
  11.  
  12. if( class_exists( $strModule ) )
  13. {
  14.  Core::get( $strModule, new $strModule );
  15.  return TRUE;
  16. }
  17. else
  18. {
  19.  throw new Exception( 'Core::LoadModule - Nie istnieje klasa ' '. $strModule .' ' .' );
  20.  return FALSE;
  21. }
  22.  }
  23.  else
  24.  {
  25. throw new Exception( 'Core::LoadModule - Plik ' '. $strModule .'.class.php' nie istnieje.' );
  26. return FALSE;
  27.  }
  28.  
  29. }
  30. //...
  31. ?>

Ale to moduly core... co do modolow typu menu news itp. bedzie do tego dodatkowa klasa ktora bedzie je odpowiednio ladowac tzn.
Wpierw sa pobierane dane z bazy danych nastepnie sa interpretowane, poczym zostaja zalaczone i tam odpowiednia czesc kodu nimi steruje, wysylaja dane i takowe o ile sa sa wysylane posrednio do widoku ktory je interpretuje...

Co do dziedziczenia w modelu nie wiem czy to napewno trafne. Osobiscie wolal bym obiekt wrzucic do protected i tam na nim operowac (w zaleznosc od tego co che uzywskac laduje sie odpowiednia klasa).

Ogulnie to malo co zrozumialem z pytania wiac odpowiedz tez moze byc malo zrozumiala i nie trafna
Go to the top of the page
+Quote Post
.dragonfly
post
Post #5





Grupa: Zarejestrowani
Postów: 217
Pomógł: 0
Dołączył: 5.10.2003
Skąd: Londyn / UK

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


Jedynym niedopatrzeniem z mojej strony mogl byc byc fakt iz nie pokusilem sie o sprawdzanie czy dana klasa oraz plik istnieja, ale to w rozwazaniu na temat metody sprawa kosmetyczna.

  1. <?php
  2.  
  3. /**
  4. * Wybiera odpowiedni modul, includujac plik
  5. *
  6. * @param $strModuleType
  7. * @param $strModuleName
  8. * @param $strModuleVar
  9. * @return
  10. */
  11. function loadModule( $strModuleType, $strModuleName, $strModuleVar = false )
  12. {
  13. if ( !$strModuleVar ) $strModuleVar = $strModuleName;
  14.  
  15. if ( file_exists( ENVIE_DIR . &#092;"modules\" . $strModuleType . \"envie.module.\" . $strModuleName . \"\" . $strModuleName . '.module.php' ) )
  16. {
  17. require_once ( ENVIE_DIR . &#092;"modules\" . $strModuleType . \"envie.module.\" . $strModuleName . \"\" . $strModuleName . '.module.php' );
  18. if ( class_exists( $strModuleName ) )
  19. {
  20. $this->model[$strModuleVar] = new $strModuleName;
  21. } 
  22. else
  23. { 
  24. // brak klasy
  25. } 
  26. } 
  27. else
  28. { 
  29. // brak pliku
  30. } 
  31. } 
  32. ?>


Dodatkowo w twoim rozwiazaniu nie ma mozliwosci zaladowania modulu pod inna nazwa. Tzn. nie mozesz zaladowac modulu "Foo" i odwolywac sie do niego poprzez np. $this->model[bar]->costam()

Co do dziedziczenia w modelu jest to jak najbardziej wskazane przy takowym rozwiazaniu wiec w tym aspekcie nie moge sie z toba zgodzic. Anyone else?
Go to the top of the page
+Quote Post
kwedo
post
Post #6





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 22.11.2004
Skąd: Polska

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


mi obecne dzialanie kodu odpowiada (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
bela
post
Post #7


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

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


sorry za OT: ale czemu macie takie same avatary ? trudno was rozronic (IMG:http://forum.php.pl/style_emoticons/default/dry.gif)
Go to the top of the page
+Quote Post
.dragonfly
post
Post #8





Grupa: Zarejestrowani
Postów: 217
Pomógł: 0
Dołączył: 5.10.2003
Skąd: Londyn / UK

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


Dlatego ze nalezymy do tej samej agencji (nie towarzyskiej (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) )
Reszte tego typu pytan wysylaj raczej na PW. Odpowiedzialem tutaj zeby juz nikt nie spamowal na ten temat.
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: 24.08.2025 - 10:04