![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 1 Dołączył: 24.06.2010 Skąd: Sopot Ostrzeżenie: (0%) ![]() ![]() |
Hej,
mam dwa koncepty na pisanie aplikacji, ale właściwie to oba mi nie podchodzą pod gust. Koncept 1: Rozbudowany router i wyspecjalizowane kontrolery. Wygląda to tak, że router pobiera sobie PATH_INFO, rozbija na tablice i interpretuje co jest kontrolerem, co akcją, co innymi parametrami. Odpala więc odpowiedni kontroler i przekazuje mu tablicę z ustaloną akcją i parametrami. Koncept 2: Mały router, rozbudowane i „inteligentne” kontrolery. Router pobiera sobie PATH_INFO, rozbija na tablice, rozpoznaje pierwszy parametr jako kontroler i odpala go, przekazując mu surową tablicę. Dopiero kontroler ma swój mini-router, który rozpoznaje co jest akcją, co parametrem i na tej podstawie działa. Które rozwiązanie jest lepsze? Kolejne pytanie. Chciałbym, żeby aplikacja była możliwie bardzo zmodularyzowana, a więc, żeby można było wziąc klocki i na ich podstawie zbudować stronę. Takimi klockami byłby moduł menu, moduł newsów, moduł kalendarza, księgi gości, moduł reklamy, itd. Każdy moduł miałby swój kontroler i zestaw widoków. Czyli działanie aplikacji wyglądałoby tak: Chcę wyświetlić stronę z newsem, to odpalam kontroler newsów, który zajmuje się wyświetleniem newsa. Oprócz tego odpalam kontroler menu i kontroler reklamy. Każdy to niezależny klocek, który można wykorzystać na dowolnej stronie. Już o tym kiedyś pisałem. Jak jednak to zrealizować? Musiałbym kontrolerowi newsów w odpowiednim momencie kazać wyświetlić to menu, czyli kontroler musiałby albo mieć metodę render (czyli zajmować się aspektami widoku) albo zwracać w zmiennej gotowy kod HTML, który wyświetlałby dopiero kontroler, który wywołał moduł tworzenia menu... No kolejna sprawa. Mam np http://strona.com/news/4/ Czyli strona odpala kontroler News, akcja domyślna View, parametr 4 jako identyfikator newsa. Z drugiej strony mam panel admina: http://strona.com/admin/news/4/edit/ Czyli strona odpala kontroler admin, ten odpala kontroler news, itd. Czy powinienem zrobić dwa oddzielne kontrolery - jeden "kliencki" tylko z opcją wyświetlania, drugi adminowy, z edycją, itd. - czy może jeden kontroler „inteligentny”, który w zależności od kontekstu inaczej się zachowuje? Dzięki za odpowiedzi, ostatnio więcej siedzę i myślę nad koncepcją pisania niż rzeczywiście spędzam czas na kodowaniu... (IMG:style_emoticons/default/sciana.gif) |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 30 Pomógł: 0 Dołączył: 9.09.2010 Ostrzeżenie: (0%) ![]() ![]() |
Wprowadź w swoją aplikację dodatkową warstwę usług. Jak wyżej Ci dobrze poradzono - daj Cezarowi to cezara a bogu to co do boga należy. Inaczej rzecz mówiąc - Router niech zajmie się routingiem i niczym innym. Jak to działa w praktyce ?
W URL albo innym sposobem (widziałem zastosowanie gdzie przekazywane parametry były z tablicy $_SERVER) przekaż usługę z jakiej korzystasz. Po co usługa ? A no np nie trzeba inicjalizować całego systemu kiedy użytkownik sięga ajaxem po jeden moduł. Tak samo nie trzeba tego robić jak użytkownik sięga po jakiś zabezpieczony plik. Ładujesz usługę która ładuje MINIMUM potrzebnych informacji (np dane użytkownika i prawach dostępu do zasobu). Standardowa usługa (ja z natury zwę ją public, moj kolega po fachu używa "default", co kto woli) ładuje pełną stronę. Tutaj już do pracy wchodzi router. Jest on odpowiedzialny za analizę URL'a. Tutaj jego zadanie polega TYLKO na zidentyfikowaniu usługi i uruchomieniu jej. Po czym przekazuje usłudze kontrole. Gdy usługa zostaje uruchomiona znowu wywołujemy Router prosząc o parametry specyficzne dla danej usługi, bierzemy się za załadowanie informacji o użytkowniku i stronie którą wywołał. Dopiero tutaj uzupełniane są uprawnienia użytkownika (bo różne usługi mogą korzystać z różnego zestawu uprawnień), informacje o stronie (np jakie moduły się na niej pojawią) i jaką akcję użytkownik wywołuje (a może wysłał formularz stronę szybciej). W tym momencie ładujesz widok i moduły. Ja osobiście na tym etapie troszkę namieszałem. Nie mniej jednak wcześniej ładujemy widok i sprawdzamy czy wszystko jest OK (czy struktura strony się zgadza, czy pliki są na miejscu, czy uprawnienia są ok). Jeżeli wszystko jest gotowe, ładuję kolejno moduły i wykonuję je. Te zwracają mi sparsowany kod HTML (korzystam smarty i cieszę się z możliwości metody fetch() która jest tam obecna). i zbieram kod HTML po widoku który następnie wysyłam do zmiennej szablonu (moduły mają własne pliki szablonu które mogą być nadpisane przez szablon strony) i uzupełniam stronę. Tak przygotowana strona zostaje wyświetlona. Mam możliwość kontrolowania w którym miejscu co się pojawi, czy się pojawi, jak się pojawi itp. Dodatkowo sam proces jest dość prosty i przejrzysty. No i jak na razie żaden programista który miał do czynienia z moim kodem nie narzekał. To tak w skrócie. Ten post edytował dariuszp 9.09.2010, 18:22:17 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.10.2025 - 09:09 |