Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Widok - problem natury projektowej
Forum PHP.pl > Forum > PHP > Object-oriented programming
Crazy_Ivan
Na początku zaznaczam ze jestem początkujący w tematyce obiektowej.

Powiedzmy ze mam front controller który wybiera kontroler tworzy obiekt danej klasy i wywołuje dana metodę.
Powiedzmy ze dana klasa jest controllerem newsow , a metoda pobiera 10 najnowszych newsow. Oczywście idzie zapytanie do modelu o dane i i przekazuje widokowi. I wszystko pięknie ładnie winksmiley.jpg ale powiedzmy ze chce wykorzystać SMARTY do widoku , i niby wszystko cacy tworze obiekt , wysyłam zmienne i daje display. Jednak jeśli ja na stronie z newsami chce jeszcze w jakiejś kolumnie mieć dodatkowe rzeczy nie związane z modułem newsów np. 10 najnowszych dodanych plików i np. 10 najnowszych artów. Mam stworzyć 'ręcznie' obiekt do plików i obiekt artów przed wywołania front controllera ? a może stworzyć jakiś łańcuch akcji ktore mają się jeszcze wywołać i umieścić to w metodzie od newsów. Ale żeby takie coś zrobić to jedynie co mi przychodzi to jakiś wielki pojemnik na dane taka mega tablica ogólnodostępna do której pakowali byśmy wszystkie dane które maja być wyświetlane w widoku a następnie utworzyć obiekt smarty wysłać zmienne i wyświetlić szablon.

Nie wiem jak się za to zabrać.
Cysiaczek
Łańcuch akcji to wg. mnie najlepsze rozwiązanie. Poszukaj na forum - ostatnio było o tym kilka topików w oop i pro i chyba też w 'gotowe rozwiązanie' coś było.

Pozdrawiam.
Crazy_Ivan
Poczytałem i rzeczywiście łańcuch akcji jest niezłym rozwiązaniem. Dodatkowo tworząc strukturę łańcucha w zewnętrznym pliku xml zyskujemy na elastyczności. Jednak dalej problem sprawia warstwa widoku korzystająca ze smarty. Pomyślałem że stworzyć singleton do którego wrzucalibyśmy dane z wszystkich metod. Singleton posiadał by metodę prywatna 'render' która tworzyła by obiekt smarty, wybierała widok, wysyłała all do szablonu i zapuszczała by display. Sama metoda 'render' była by wywoływana w destruktorze singletonu.
Ludvik
Cytat
Pomyślałem że stworzyć singleton do którego wrzucalibyśmy dane z wszystkich metod. Singleton posiadał by metodę prywatna 'render' która tworzyła by obiekt smarty, wybierała widok, wysyłała all do szablonu i zapuszczała by display

Nie za dużo tego? tongue.gif To nie wygląda na dobrze przemyślany pomysł - jeden obiekt = jedna odpowiedzialność.

Podglądnij, jak to jest zrobione w symfony. Akcje zawierają kontener (ang. parameter holder), w którym możesz zapisywać dane pochodzące z ich metod. Nie jest on żadnym singletonem - przekazywany jest do instancji klasy akcji. Po wykonaniu łańcucha akcji, cały ten kontener jest przekazywany do obiektu widoku, który może te dane przesłać dalej do szablonu.

Jest to dosyć eleganckie rozwiązanie, bo zapisujesz dane w formacie niezależnym od rodzaju wyjścia. Możesz także udekorować taki kontener, jeżeli potrzebujesz dodatkowych informacji.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.