![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Hej doszedlem do wniosku ze w moim fw widok, ogolnie warstwa prezentacji jako szablon to za malo, w sensie gdy zajdzie potrzeba na wyswietlenie innego fotmatu pdf,xml,text,csv czy json bedzie lipa i albo nie da rady albo bede musial kombinowac w kontrolerze i robic rzeczy ktorych nie powinno sie robic.
Wiec postanowilem poszerzyc fw o nowa funkcjonalnosc, oprocz widokow jako szablony mozna uzywac klasy. Jednak nie wiem zabardzo jak to najlepiej rozwiazac do tej pory doszedlem do 2 sposobow: -Osobna klasa widoku na kazdy format czyli News_View_Html,News_View_Xml itp...itd... -Jedna ogolna klasa News_View implementujaca interfejs IView ktory ma metody: renderHtml,renderXml,renderJson itp..itd Moze pokaze pseudo kod to bedzie bardziej wiadomo o co mi chodzi:
I potem reszta:
Kod pisany na szybko z palca wiec moze sa jakies bledy, to ma byc tylko taki ogolny zarys. Chodzi o to ktore rozwiazanie jest lepsze, a moze zadne z nich i proponujecie inne...? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 30 Pomógł: 0 Dołączył: 9.09.2010 Ostrzeżenie: (0%) ![]() ![]() |
Typ widoku można przekazywać na różne sposoby. Np mój kolega po fachu trzyma je w URL ale zawsze je maskuje poprzez mod_rewrite. Spotkałem się z przypadkiem gdzie korzystano ze zmiennych środowiskowych przez co po prostu dostawałeś parametr w tablicy superglobalnej $_SERVER. Metoda jest mało ważna.
I owszem. Chodzi mi o takie klasy jak podałeś wyżej. Teoretyzowanie mi nie wychodzi więc może podam jak ja to wykonałem u siebie. Projekt który tworzę jest podzielony na moduły do tego stopnia że nie ma w nim nic co by było wpisane na sztywno. Nie licząc domyślnego moduły. Jego obecność jest obowiązkowa. Domyślny moduł jest widokiem panelu administracyjnego. Każdy moduł ma część administracyjną i publiczną. Na jednej stronie może być kilka modułów. Moduły mogą być umieszczane na różnych stronach. Każda "instancja" modułu na stronie ma własną konfigurację. Przy realizacji tego natrafiłem na parę problemów. Czasami musiałem uzyskać jakieś dane poprzez AJAX. Problem leżał tu że... nie za bardzo było się gdzie po nie odwołać. Witryna przechodziła cały proces od zaczytania danych z określonych źródeł, przez wykonanie całej logiki, załadowanie szablonów i wyświetlenie tego. Musiałem pisać obejście specjalnie dla AJAX w tym procesie. W końcu chciałem by moduł zwrócił określone dane z pominięciem głównego szablonu strony. Później doszła generacja plików XML. Oprócz XML zastosowałem również JSON. Krew mnie zalała jak na potrzeby projektu musiałem dorobić widok gdzie właściwie NIC nie było wyświetlane, po prostu output był wysyłany na zewnętrzny serwer poprzez socket. Wtedy stwierdziłem że jak tak dalej pójdzie to wyłysieję, dostanę nerwicy i kto wie co jeszcze. W skrócie podobny problem co u Ciebie. Od kolegi zapożyczyłem rozwiązanie i zastosowałem Service Layer (jeżeli nie pomyliłem nazwy). Dlatego je zaproponowałem w Twoim wypadku. Teraz moduł ma dopisaną listę takich usług jakie obsługuje. Jeżeli jest to JSON i XML to prosząc usługę AJAX dostaje po prostu 404. A działa to w ten sposób: - ładowane są dane np z bazy danych - moduł robi co trzeba i przygotowuje ArrayObject z tymi danymi. Stosuje określone nazewnictwo i zasady więc taka tablica zawsze ma podobną postać. Po prostu jej fragmenty mogą istnieć bądź nie. - następnie wywoływana jest żądana usługa do której jest przekazywany ArrayObject. - na wyjściu spodziewaj się danych w formacie XML, TXT, JSON lub cokolwiek sobie zaplanowałeś w usłudze. Do usługi jest właściwie przekazywane końcowe sterowanie aplikacją. Jej wykonanie kończy wyświetlenie danych w jakiejkolwiek formie. Przykładowo usługa HTTP ładujesz szablon strony, wykonuje moduły a ich kod wynikowy umieszcza w odpowiednich miejscach na stronie. Usługa AJAX ładuje zawsze pojedynczy moduł, przygotowuje dane i surowo je wyświetla tak byś mógł je odebrać ze skryptu. Usługa JSON po prostu przerabia array object na json i wyświetla. Tak samo z XML. Usługa Socket odbiera od żądania login, hasło i adres serwera. Jak login i hasło się zgadzają to wysyła dane na zewnętrzny serwer. Właściwie cokolwiek sobie wymyślisz, wystarczy stworzyć odpowiednią usługę i jazda. Później w jednym miejscu zmieniasz sposób postępowania dla XML, strony WWW czy ściągania plików. Bardzo przejrzysta i fajna metoda. Ten post edytował dariuszp 15.09.2010, 11:01:55 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 7.10.2025 - 21:56 |