![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 338 Pomógł: 2 Dołączył: 4.03.2006 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Rapide Framework
(IMG:http://adrian.livenet.pl/Rapide100.png) Rapide Framework powstał na bazie rozwiązań stosowanych w kilku frameworkach. Organizację i sterowanie w dużej mierze oparto na Zend Framework. Kierowałem się przede wszystkim prostotą. Mojavi (tym bardziej Symphony) jest moim zdaniem zbyt rozległe. Po całej aplikacji krążą obiekty kontekstów, kontrolera głównego... Nie, nie - to nie jest to, czego szukałem. Całe sterowanie w Rapide powierzono małemu i elastycznemu Front Kontrolerowi. Jądro podzielono na jak najmniejsze części pozwalające w przyszłości na szybką ich wymianę. Na pierwsze spojrzenie Rapide działa identycznie jak Zend Framework. Jednak po głębszym zapoznaniu się z frameworkiem, okazuje się, że Rapide jest znacznie wygodniejsze. Przede wszystkim Rapide poprawnie implementuje widok z MVC. W każdej chwili możemy zamienić widoki, aby prezentowane dane ukazały się np. w formacie CSV. Ponadto wiele czynności zostało zautomatyzowanych, dzięki czemu nie musimy wczytywac konfiguracji do akcji, czy też martwić się o kontrolę dostępu. Cechy frameworka
Kod do pobrania: http://vgm.pl/adrianpawlikpl/rapide/ Tworzenie kontrolera Kontrolery w aplikacji powinny dziedziczyć po abstrakcyjnej klasie Rapide_Controller. W zasadzie framework wymaga, aby kontrolery implementowały interfejs Rapide_Controller_Interface. Katalog kontrolerów definiowany jest w pliku konfiguracyjnym Rapide/config.php. Kontroler musi byź zapisany pod nazwą Kontroler.class.php. Kontroler jest kontenerem dla wszystkich akcji. Dla przykładu: kontroler Nowosci będzie zawierał akcje Dodaj, Pokaz, Usun, Edytuj itd. Klasa kontrolera musi nosić nazwę Controller_Kontroler, natomiast metody będące akcjami - AkcjaAction. Przykładowy kontroler
Teraz wystarczy w przeglądarce wpisać adres: http://TwojAdres.pl/www/?controller=Exampl...;action=Example. Rezultatem pracy frameworka będzie wyżej podany komunikat. Metody klasy Rapide_Controller Kontroler bazowy w Rapide został tak zaprojektowany, aby uprościć i przyśpieszyć budowę aplikacji. Poniższa lista zawiera metody, których warto używać: getParameter($sParameter) Zwraca parametr GET przekazany w adresie do kontrolera. W przypadku braku parametru wzraca null. hasParameter($sParameter) Zwraca wartość logiczną informującą, czy istnieje parametr GET przekazany w adresie. getConfig() Zwraca obiekt konfiguracji dla danego kontrolera. Dane konfiguracyjne pobierane są z tablic php zapisanych w katalogu konfiguracji kontrolerów. getView($sView) Zwraca obiekt danego widoku. Widok pobierany jest z katalogu widoków. getModel($sModel) Zwraca obiekt wybranego modelu. Model pobierany jest z katalogu widoków. getUser() Zwraca obiekt User, który pozwala na zapis danych sesyjnych. getLanguage() Zwraca obiekt języka. Dane językowe dla kontrolera ładowane są wcześniej w pluginie Rapide_Plugin_Language. forward($sController = null, $sAction = null, array $aParameters = array()) Pozwala na określenie następnej akcji do wykonania. Pozostawienie wartości pustych spowoduje forwarodwanie na domyślny kontroler. redirect($sController = null, $sAction = null, array $aParameters = array()) Pozwala wykonać przekierowanie na inną akcję. Pozostawienie wartości pustych spowoduje przekierowanie na domyślny kontroler. Każdy kontroler posiada domyślną akcję Index. Jest ona wywoływana, jeżeli akcja nie zostanie określona. Przykładowe kody Kontroler User - akcja zmiany hasla dla zalogowanego uzytkownika
Widok i szablon widoku dla tej akcji
Jak już wspomniałem - framework napisałem dla siebie. Mam nadzieję, że komuś może się przydać, chociaż w celach edukacyjnych. Pozdrawiam, Adrian J. Pawlik. Ten post edytował Prph 5.11.2006, 19:56:50 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 487 Pomógł: 7 Dołączył: 7.01.2004 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Przede wszystkim - brak jakiejkolwiek dokumentacji w kodzie strasznie utrudnia jego przeglądanie.. pomijam fakt, że póki co jeszcze brakuje przykładowej aplikacji
Rapide Framework powstał na bazie rozwiązań stosowanych w kilku frameworkach. Organizację i sterowanie w dużej mierze oparto na Zend Framework. Kierowałem się przede wszystkim prostotą. Mojavi (tym bardziej Symphony) jest moim zdaniem zbyt rozległe. Po całej aplikacji krążą obiekty kontekstów, kontrolera głównego... Nie, nie - to nie jest to, czego szukałem. Kontekst. Jeden kontekst. W Mojavi 3.0 kontekst był singletonem. W 4.0 nie było go wogóle, w jego miejsce był użyty ServiceLocator. Całe sterowanie w Rapide powierzono małemu i elastycznemu Front Kontrolerowi. Jądro podzielono na jak najmniejsze części pozwalające w przyszłości na szybką ich wymianę. To niewątpliwa zaleta. Widziałem, że używasz interfejsów w miejsce klas abstrakcyjnych. Troche mnie dziwi i zaskakuje konwencja nazewnicza i aż takie wyróżnienie interfejsów. Z mojego punktu widzenia nie ma większego sensu aż tak rozbijać nazw, bo tworzą się przez to strasznie długie łańcuchy. Czy nie lepiej użyć Rapide_Router zamiast Rapide_Router_Interface? Przede wszystkim Rapide poprawnie implementuje widok z MVC. W każdej chwili możemy zamienić widoki, aby prezentowane dane ukazały się np. w formacie CSV. Widok widokiem, implementacji MVC jest wiele. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Nie wiem czy zauważyłeś, ale w Mojavi 4 nie było konieczności dziedziczenia ze SmartyView/HtmlView, ponieważ były użyte Renderery. Dzięki nim możesz w bardzo prosty sposób tworzyć różne fragmenty stron w wielu technologiach. U Ciebie widzę jeszcze zaszłość po Mojavi 3, gdzie dziedziczenie jest wymuszone. Przydatną rzeczą jest również rozbicie widoków w zależności od content-type. Jest to bardzo fajna sprawa, ponieważ w połączeniu z routes, które powinny dawać możliwość zmiany typu outputu daje to nieprawdopodobne wręcz możliwości. Co do Apletów - rozważyć należy czy to jest element widoku? Myślę, że Aplet jest mimo wszystko częścią, która jest bardziej zbliżona kontrolerowi. Dlaczego? W chwili obecnej decyzję o tym, co ma się stać z Apletem pozostawiasz widokowi. To niedobrze, zgodnie z filozofią OOP obiekt powinien wiedzieć sam co ma ze sobą zrobić. Rozważ to czy nie użyć "layoutu" w połączeniu z rejestrowaniem Apletów podatnych na zdażenia. W Javie jest taka technologia, która zwie się Portlety. Jest to rozszeżenie a właściwie zawężenie Servletów. Na portlecie można wykonać kilka akcji - hide/show, valid etc. Ponadto wiele czynności zostało zautomatyzowanych, dzięki czemu nie musimy wczytywac konfiguracji do akcji, czy też martwić się o kontrolę dostępu. Z tym, że póki co przykładów brak (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) [*]Rapide_User Klasa danych sesyjnych. Umożliwia autentyfikacje użytkownika oraz składowanie danych w sesji. Zastępuje standardową tablicę $_SESSION. Umożliwia stosowanie handlerów, dzięki czemu sesja może być przechowywana w bazie danych. To nie jest poprawne podejście. User w Mojavi to nie jest handler sesji. To są dane obecnego użytkownika, jego sesja. To, jakiego handlera użyje programista nie powinno być zależne od frameworka. Fakt, framework może oferować taką funkcjonalność, ale nie w tak ścisłym związku z sesją. [*]Rapide_ACL Access Control List - system kontroli dostępu. Pozwala na definiowanie grup mająych dostęp (lub nie) do poszczególnych kontenerów (akcji). Przykład? [*]Rapide_Database_MySQL Sterownik bazy danych MySQL dostarczający prosty i szybki w użyciu interfejs zarządzający danymi w bazie. Myślę, że w chwili obecnej tworzenie kolejnego poziomu abstrakcji do bazy danych to pomyłka. W chwili, gdy PDO jest i na pewno zostanie powinieneś bardziej się skupić na jego rozszeżaniu. Ponadto PDO jest znacznie szybsze niż natywne funkcje php. [*]Rapide_Language Prosta klasa języka. Dane przechowywane są w tablicach php. A może obsługa gettexta? [*]Rapide_Validator Szereg klas z rodziny Rapide_Validator dostarczaja prostych i skutecznych mechanizmów walidacyjncyh dla danych. Przykład? Konfiguracja? [*]Rapide_Form Klasa umożliwiająca szybki dostęp do danych przesłanych za pomocą formularzy. Obecnie bardzo skromna. [/list] Przykład? Inna sprawa to to, że nie ma sensu wiązać się aż tak bardzo z tą klasą. Dlaczego? Lepsze jest dostarczenie mechanizmów, które ułatwiają prezentacje błędów niż wiązanie widoku z formularzem. Po co mi klasa, która tylko i wyłącznie tworzy mi input? Po to by określić validator? Wolę to wyłączyć do oddzielnego pliku i tam to trzymać, tak bym mógł w jednym miejscu zmieniać zasady sprawdzania np nazwiska. Mam nadzieje, że te uwagi będą dla Ciebie przydatne i dzięki nim Twój framework stanie się lepszy. Pozdrawiam, |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.10.2025 - 18:58 |