Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mvc] Wybor widoku dla poszczegolnych akcji
Helios
post
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 8.07.2006

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


Witam

Moze najpierw przedstawie ogolny schemat dzialania mojego systemu.

- Fasade stanowi FrontController
- FrontController tworzy instancje obiektow ResponseContext, RequestContext
- FrontController korzysta z pomocy ApplicationController
- ApllicationController wybiera z zadania modul i akcje do wykonania
- Mapper akcji parsuje plik XML i zwraca dane dt. lancuchow akcji, widokow dla poszczegolnych rezultatow wykonania danej akcji itd.
- ApllicationController korzysta z mappera akcji i udostepnia konrolerowi informacje o lancuchach akcji i widokach
- FrontController wykonuje w petli lancuchy akcji na danych modulach udostepniajac im kontekst Request i Response, a nastepnie wyswietla widok

I teraz moje pytanie. Chce miec mozliwosc generowania listy newsow w postaci xhtml, rss, pdf itd., a wiec nie chce na sztywno deklarowac, ze np. widok musi byc realizowany przez Smarty. Chce jakos zorganizowac wybor wyjscia w trakcie dzialania aplikacji.
Jak byscie rozwiazali ten problem? Wymyslilem, ze nieglupim rozwiazaniem byloby, aby zajal sie tym mapper akcji. W tym przypadku musialbym deklarowac w pliku XML typ wyjscia np.:

  1. <module name="News">
  2.      <command name="add">
  3.            <state id="1">
  4.                  <forward>getHtmlList</forward>
  5.            </state>
  6.      </command>
  7.      <command name="getHtmlList">
  8.            <view type="html">news.tpl</view>
  9.      </command>
  10.      <command name="getPdfList">
  11.            <view type="pdf">news.pdf</view>
  12.      </command>
  13. </module>


FrontController mialby korzystac z fabryki widokow, tworzyc widok typu zdefiniowanego w akcji (zakladajc ze fabryka widokow zwraca system widokow z zaimplementowanym interface'em View, aby wymusic istnienie metody display)

  1. <?php
  2. $objView = ViewManager::getView($objAppController->getViewType());
  3. $objView->display($objAppController->getView(), $objResponseContext);
  4. ?>


Myslicie, ze jest sens bawic sie w cos takiego, czy lepiej zrobic rozpoznawanie typu widoku na podstawie rozszerzenia pliku wlasnie w fabryce widokow? A moze macie zupelnie inne rozwiazanie?

Ten post edytował Helios 1.11.2007, 00:36:03
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Helios
post
Post #2





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 8.07.2006

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


Ok, w takim razie zalozmy, ze bede przekazywal typ widoku w linkach np.:

http://example.com/news,read,,1234
http://example.com/news,read,pdf,1234

Jak to teraz rozegrac. Chcialbym zachowac niezaleznosc, moc raz odpalic system przez http a drugi raz pod konsola np. Czy powinienem stworzyc abstrakcyja klase Request i na jej podstawie utworzyc HttpRequest i ConsoleRequest a w nich metody getModule, getAction, getViewType?

  1. <?php
  2. abstract class Request {
  3.  
  4. private $params = array();
  5.  
  6. public function get($key){
  7. // implementacja
  8. }
  9.  
  10. public function set($key, $val){
  11. // implementacja
  12. }
  13.  
  14. abstract public function getModule();
  15. abstract public function getAction();
  16. abstract public function getViewType();
  17.  
  18. }
  19.  
  20. class HttpRequest extends Request {
  21.  
  22. public function getModule(){
  23. return $this->get('module');
  24. }
  25. // itd.
  26. }
  27. ?>


Czy pobieranie typu widoku, poczatkowej akcji i modulu to zadanie dla innej klasy, czy moze byc udostepniane w klasie kontekstu zadania?

Pozdrawiam

Ten post edytował Helios 1.11.2007, 15:33:20
Go to the top of the page
+Quote Post

Posty w temacie


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: 26.09.2025 - 13:50