Izabela WOŹNICA - Modele Inżynierii Teleinformatyki

Transkrypt

Izabela WOŹNICA - Modele Inżynierii Teleinformatyki
Izabela WOŹNICA
Katedra Inżynierii Komputerowej, Politechnika Koszalińska
E–mail: [email protected]
Zend Framework w dyplomowym projekcie
aplikacji internetowej
1. Wprowadzenie
Zend Framework jest technologią zyskującą coraz większą popularność wśród twórców
aplikacji internetowych. W związku z tym, że programiści potrafiący wykorzystywać
jego możliwości w tworzeniu rozbudowanych aplikacji są często poszukiwani na rynku
pracy, jest on coraz częściej wybierany jako rama projektowa w projektach dyplomowych. Niniejszy artykuł zawiera opis doświadczeń jego autora w zakresie wykorzystania funkcjonalności Zend Framework, które zdobyto w trakcie prac nad inżynierską
pracą dyplomową. Omówione zostały najważniejsze zagadnienia, których znajomość
konieczna była do podjęcia decyzji o zastosowaniu Zend Framework w projekcie oraz
stworzenia modułowej aplikacji w oparciu o tę technologię. Zagadnienia przedstawione
zostały na przykładzie bazodanowej aplikacji internetowej wspomagającej pracę wypożyczalni nośników multimedialnych.
Autorka niniejszego artykułu wyraża podziękowania dla Pana Doktora Walerego Susłowa z Katedry Inżynierii Komputerowej Politechniki Koszalińskiej, którego pomoc
była nieoceniona zarówno przy przygotowywaniu artykułu, jak i przy tworzeniu opisywanego projektu dyplomowego, którego Pan Doktor był promotorem.
2. Zend Framework jako wsparcie w procesie wytwarzania
oprogramowania
Przy tworzeniu rozbudowanych aplikacji nieocenioną pomoc stanowią frameworki [2]
(ramy projektowe), których celem jest usprawnienie procesu wytwarzania oprogramowania poprzez udostępnienie szkieletu aplikacji i klas pomocniczych gotowych do wykorzystania w tworzonym projekcie. Zdecydowanie się na odpowiedni framework może
okazać się kluczem do sukcesu. Dobry wybór może usprawnić pracę, a samą aplikację
uczynić bardziej wydajną.
Dla aplikacji internetowych tworzonych w języku PHP istnieje kilka popularnych frameworków. Do najbardziej znanych należą Symfony, CakePHP, Zend i CodeIgniter.
Przy tworzeniu omawianego projektu zdecydowano się na wykorzystanie Zend Framework, będącego dla autora nieniejszego artykułu nową technologią, co spowodowało, że
blisko połowa czasu przeznaczonego na realizację projektu została przeznaczona na
zaznajomienie się z frameworkiem Zend, z drugiej strony takie podejście umożliwiło
zdobycie nowych umiejętności i poszerzenie wachlarza rozwiązań, którymi można
dysponować przy kolejnych projektach.
176
Izabela Woźnica
Decyzja o wyborze Zend Framework jako ramy projektowej w projekcie została podjęta,
po przeanalizowaniu opinii o nim dostępnych zarówno w literaturze jak i na forach internetowych. Powody, dla których zdecydowano się na zastosowanie frameworka Zend, to:
•
•
•
•
Duża swoboda pozostawiona programiście. Tak samo jak inne ramy projektowe dla
języka PHP, Zend automatyzuje i usprawnia prace programistyczne. Wyróżnia go
fakt, że jest on nie tyle w pełni gotową strukturą aplikacji, co zestawem powiązanych
i świetnie współpracujących ze sobą klas. Ponadto powiązanie klas jest na tyle elastyczne, że pozostawia programiście dużą swobodę w wyborze gotowych rozwiązań,
które można zastosować w projekcie. w zależności od punktu widzenia ta cecha może
stanowić zarówno zaletę jak i wadę Zend Framework – z jednej strony pozostawiając
duży wybór użytkownikowi stanowi on framework bardzo elastyczny, z drugiej natomiast skonfigurowanie fundamentów tworzonego systemu wymaga większego nakładu pracy i czasu.
Usprawnienie procesu tworzenia aplikacji. Faktem jest, że poznanie Zend Framework
może okazać się czasochłonne, jednak rozwiązania, które niesie on za sobą,
w znaczący sposób mogą zwiększyć funkcjonalność tworzonej aplikacji i usprawnić
sam proces jej tworzenia.
Stosunkowo łatwy sposób wdrożenia wzorca MVC (Model – View – Controler)
w tworzonych aplikacjach [1]. Interfejs komunikacji pomiędzy elementami poszczególnych warstw zapewnia sam framework. Do projektantów i programistów należy
natomiast uzupełnienie powstałej struktury systemu dostosowaną do konkretnego
projektu logiką biznesową, opracowanie sposobu zachowania aplikacji oraz stworzenie odpowiednich widoków i bibliotek pomocniczych.
Pozostałe cechy frameworka takie jak: dobrze przetestowana baza kodu, obsługa
technologii takich jak Ajax, wsparcie dla usług sieciowych (web services), czy bardzo
rozbudowana baza ciągle rozwijanych komponentów [2]. Dzięki wspomnianym rozwiązaniom możliwości Zend Framework stają się jeszcze większe.
Wspomniane cechy Zend Framework są źródłem wielu dyskusji odbywających się na
forach internetowych pomiędzy projektantami aplikacji internetowych na temat tego,
kiedy warto stosować framework Zend [4]. Uwzględniając doświadczenia nabyte
w trakcie realizacji omawianego projektu, można uznać Zend Framework za dobre
rozwiązanie, jeżeli ważna jest duża dowolność w wyborze modułów i klas, które zostaną wykorzystane w projekcie oraz kontrola nad tworzoną aplikacją, natomiast priorytetem nie jest jak najkrótszy czas ukończenia projektu.
3. Początki pracy z frameworkiem Zend
Jeżeli nie posiada się wcześniejszego doświadczenia w tworzeniu aplikacji internetowych
z wykorzystaniem Zend Framework, opanowanie umiejętności pracy z tą technologią oraz
stworzenie fundamentów aplikacji dostosowanych do potrzeb tworzonego systemu może
być procesem czasochłonnym. w przypadku omawianego projektu czynności te pochłonęły blisko 50% czasu przeznaczonego na realizację tematu pracy dyplomowej.
Zend Framework w dyplomowym projekcie aplikacji internetowej
177
Aby korzystać z Zend Framework, należało stworzyć samodzielnie strukturę katalogów
projektu lub wykorzystać do tego celu dostarczone przez twórców frameworka narzędzie
Zend Tool. Drugie rozwiązanie uznano za bardzo przydatne, w szczególności dlatego, że
zautomatyzowanie niektórych czynności może pozwolić, początkującemu użytkownikowi
tej technologii, uniknąć błędów, które mogłyby się pojawić na samym początku prac
i które mogłyby znacząco wpłynąć na ich opóźnienie. Jako środowisko programistyczne
dla omawianego projektu wybrano aplikację NetBeans, ponieważ posiadano już doświadczenie w pracy z nią. Okazało się, że środowisko to umożliwia zintegrowanie z nim
wspomnianego wcześniej narzędzia Zend Tool, co jest rozwiązaniem bardzo komfortowym. Oczywiście można znaleźć także inne środowiska programistyczne współpracujące
z Zend Framework, takie jak Eclipse, Aptana Studio czy Zend Studio. Trwają także prace
nad środowiskiem RAD dedykowanym dla Zend Framework [6].
4. Opis architektury aplikacji
Jak wspomniano wcześniej, Zend Framework jest bogatym zbiorem współpracujących
ze sobą klas. Klasy, których znajomość jest niezbędna do pracy z frameworkiem, są to
przede wszystkim klasy kontrolerów, modeli oraz klasa Bootstrap umożliwiająca dopasowanie konfiguracji aplikacji do własnych potrzeb. Muszą one zostać wykorzystane
w większości projektów opartych na frameworku Zend, ponieważ są związane z jego
prawidłowym funkcjonowaniem.
Standardowa aplikacja Zend Framework składa się z modeli, widoków i kontrolerów.
Modele są klasami języka PHP zapewniającymi komunikację z bazą danych. Kontrolery, tak jak modele, są klasami PHP, jednak ich zadaniem jest kontrolowanie reakcji
programu na wszystkie zdarzenia zachodzące w aplikacji. Widoki są domyślnie plikami
z rozszerzeniem phtml, które zawierają kod prezentacji strony, a ich treść tworzona jest
za pomocą języka (X)HTML. Dodatkowo pliki widoków mogą zawierać skrypty CSS,
JavaScript, itp.
Omawiana aplikacja składa się z dwóch modułów: modułu Klienta i modułu Pracownika.
Choć domyślnie Zend Framework ma wyłączoną obsługę modułów, wspiera on modularyzację tworzonego oprogramowania, jeżeli zostanie odpowiednio skonfigurowany. Dla
każdego z modułów w aplikacji utworzono oddzielne kontrolery i widoki, ponieważ funkcje tych modułów nie powielają się. Modele w tworzonym projekcie są natomiast współdzielone przez moduły. Ma to uzasadnienie w fakcie, że obydwa moduły korzystają ze
wspólnej bazy danych i z tych samych jej tabel, a więc wszystkie modele reprezentujące
tabele bazy danych mogą być dostępne jednocześnie dla modułu Pracownika i modułu
Klienta. Sytuacja taka niesie za sobą konieczność wydzielenia modeli z modułów.
Na rysunku 1 zaprezentowano poglądowy schemat standardowej architektury aplikacji
stworzonej w Zend Framework, natomiast rysunek 2 prezentuje strukturę jaką uzyskano
w omawianym projekcie.
Na modele składają się w omawianej aplikacji dwie rodziny klas: klasy dziedziczące po
klasie nadrzędnej Zend_DbTable_Abstract oraz klasy potomne dla Zend_DbTable_Row.
Wspomniane klasy bazowe są elementami wchodzącymi w skład Zend Framework.
Klasy wywodzące się z Zend_DbTable_Abstract reprezentują w aplikacji tabele bazy
178
Izabela Woźnica
danych, natomiast klasy
k
dziedziczące po Zend_DbTable_Row odzwierciedlają pojedynpojedy
czy rekord konkretnej tabeli.
Każda klasa reprezentująca tabelę bazy danych może posiadać odpowiednie właściwowłaściw
ści dziedziczone z klasy nadrzędnej, za pomocą których można definiować relacje pop
między
dzy poszczególnymi klasami odpowiadające relacjom pomiędzy tabelami bazy
danych. Dzięki temu możliwe jest korzystanie z udostępnianych przez Zend Framework
metod pozwalających na automatyczne pobranie odpowiadających sobie rekordów
z bazy danych. Klasy warstwy
warstwy modeli zostały uzupełnione metodami realizującymi
często wykonywane w aplikacji operacje na danych.
Rys. 1. Poglądowy schemat architektury domyślnej aplikacji Zend Framework
Fig. 1. Illustrative architecture diagram of the default Zend Framework application
appl
Rys. 2. Poglądowy schemat architektury opisywanej aplikacji
Fig. 2. Illustrative architecture diagram of the described application
W celu podziału aplikacji na dwa moduły dokonano rozdziału warstwy kontrolerów
i widoków, przypisując każdemu z modułów
odułów oddzielny zbiór klas kontrolerów i plików
widoków. Wszystkie klasy kontrolerów dziedziczą po wchodzącej w skład Zend FrameFram
work klasie nadrzędnej dla kontrolerów dostępnej pod nazwą Zend_Controller_Action.
Zend_Controller_Action
Metody kontrolerów nazywane są akcjami. Domyślnie
Domyślnie do każdej akcji kontrolera przypiprzyp
Zend Framework w dyplomowym projekcie aplikacji internetowej
179
sany jest odpowiadający jej widok prezentujący wynik działania tej akcji. Widoki, czyli
pliki warstwy widoków, w przeciwieństwie do modeli i kontrolerów nie są klasami. Kod
zawarty w plikach widoków, omawianej aplikacji, został napisany za pośrednictwem
języka XHTML.
Aby ujednolicić wygląd aplikacji w każdym z modułów, zdecydowano o uruchomieniu
opcji frameworka pozwalającej na korzystanie z mechanizmu szablonów. Każdy moduł
omawianej aplikacji posiada osobny plik szablonu, który wchodzi w skład warstwy
widoków tego modułu. Zawartość widoków zwracających rezultat działania konkretnej
akcji jest umieszczana w odpowiednim miejscu szablonu. Uzupełniony o widok szablon
stanowi odpowiedź wysyłaną do użytkownika po wykonaniu akcji w aplikacji.
5. Konfiguracja aplikacji korzystającej z Zend Framework
Aby dostosować domyślą konfigurację Zend Framework do własnych potrzeb, należało
wprowadzić zmiany w plikach konfiguracyjnych projektu. Najważniejsze są pliki application.ini oraz bootstrap.php.
Pierwszy z nich zawiera podstawową konfigurację aplikacji. W omawianym projekcie
w pliku application.ini opisana została m.in. konfiguracja połączenia z bazą danych,
deklaracja przestrzeni nazw, z których klasy zostaną automatycznie załadowane do
projektu oraz definicje ścieżek routingu pozwalających na stworzenie aliasów dla standardowych adresów podstron aplikacji.
Plik Boostrap.php w przeciwieństwie do application.ini ma postać klasy. Umożliwia on
ustawienie większej ilości parametrów aplikacji. Klasa Boostrap domyślnie nie posiada
żadnych metod ani pól, natomiast w celu dodania nowych ustawień należy dopisać
własne metody, które zostaną automatycznie wykonane przy uruchomieniu aplikacji.
Klasę tę można wykorzystać np. w celu zainicjowania połączenia z bazą danych już
przy starcie aplikacji – jeśli połączenie nie zostanie nawiązane, można zwrócić odpowiedni komunikat użytkownikowi. w przypadku nie zastosowania tej techniki użytkownik dowie się o braku połączenia z bazą dopiero w momencie wywołania metody wykonującej operacje na bazie danych.
6. Sposób działania aplikacji
Przed rozpoczęciem pracy z Zend Framework ważne było postawienie sobie pytania,
jak to się dzieje, że użytkownik, wpisując w wyszukiwarce internetowej adres URL
odwołujący się do jednej z podstron aplikacji, zostaje przeniesiony do odpowiedniego
widoku i uzyskuje wynik działania akcji właściwego kontrolera. w tym miejscu przybliżona zostanie zasada działania aplikacji od momentu wywołania żądania wyświetlenia
konkretnych danych przez użytkownika do zwrócenia wyniku przez aplikację. Wiedza
ta była kluczowa w zrozumieniu podstaw funkcjonowania Frameworka Zend.
Po wysłaniu żądania wyświetlenia konkretnej podstrony aplikacji, w pierwszej kolejności uruchomiony zostaje zawsze plik index.php. Jest to jedyny plik PHP aplikacji dostępny w katalogu publicznym. Wykonanie index.php powoduje automatyczne wywołanie obiektu klasy Bootstrap. Obiekt ten, odpowiada za utworzenie przez Zend Frame-
180
Izabela Woźnica
work obiektów zasobów, które będą wykorzystywane w dalszej pracy aplikacji. Wspomniane zasoby opisane są w pliku konfiguracyjnym application.ini. Odnalezienie właściwego modułu, kontrolera i właściwej akcji, która powinna zostać wywołana, odbywa
się za pomocą analizy adresu URL. Domyślnie w adresie tym podawane są trzy parametry rozdzielone ukośnikiem. Stanowią one nazwy odpowiednio modułu, kontrolera
i odpowiedniej akcji. Jednak adresy w tej postaci są trudne do zapamiętania. Dlatego dla
aplikacji mogą zostać zdefiniowane w pliku application.ini tzw. ścieżki routingu.
W trakcie tworzenia komponentów po uruchomieniu pliku Boostrap, utworzony został
automatycznie obiekt routera. Pozwala on na przeszukiwanie zdefiniowanych przez
programistę ścieżek routingu w celu znalezienia odpowiedniej akcji, którą należy wywołać. Definiowanie ścieżki routingu polega na określeniu adresu, po wywołaniu którego router rozpozna, że chodzi właśnie o tę ścieżkę oraz określeniu modułu, kontrolera
i akcji, które zostaną przypisane do zdefiniowanej ścieżki. W ten sposób można określić
także domyślny moduł, kontroler i domyślną akcję dla aplikacji. Jeśli router nie odnajdzie poszukiwanego adresu na ścieżce routingu, tworzony jest obiekt kontrolera błędów.
Jeśli przeszukiwanie ścieżek routingu zakończy się sukcesem, następuje utworzenie
obiektu odpowiedniego kontrolera, a następnie wywołanie odpowiedniej akcji. Za zarządzanie obiektami kontrolerów tworzonymi w czasie trwania pracy aplikacji odpowiada
Zend Framework. W każdej akcji istnieje możliwość przekazania danych do widoku poprzez zdefiniowanie odpowiednich zmiennych. Po zakończeniu działania akcji generowany jest plik widoku. Jeśli tworzona aplikacja korzysta z mechanizmu szablonów oferowanego przez Zend Framework, to wygenerowany w skutek wykonania akcji widok zostaje
umieszczony w odpowiednim miejscu szablonu przeznaczonego dla danego modułu. Tak
przygotowana strona jest zwracana jako odpowiedź http na żądanie użytkownika.
7. Wykorzystanie opcjonalnych funkcjonalności frameworka
Zend udostępnia programistom obszerną bazę pomocniczych modułów i klas, które
można wykorzystywać w projektach w celu poszerzenia ich funkcjonalności. Przed
przystąpieniem do poszukiwania rozwiązania jakiegoś problemu w trakcie tworzenia
aplikacji warto wcześniej sprawdzić, czy gotowe rozwiązanie nie zostało już zaimplementowane w frameworku.
Po oprogramowaniu podstawowych funkcji aplikacji, przystąpiono do uzupełniania
jej o funkcje dodatkowe. w omawianym projekcie wykorzystano takie opcjonalne
klasy frameworka jak Zend_Pdf wraz z klasami pomocniczymi (m.in. Zend_Pdf_Page
i Zend_Pdf_Font) do generowania dokumentów w formacie PDF czy Zend_Barcode
do generowania kodów w formacie EAN-13 niezbędnych do sprawnej obsługi czytnika kodów kreskowych w aplikacji.
Przy tworzeniu mechanizmu logowania warto wykorzystać moduł autoryzacyjny Zend
Framework o nazwie Zend_Auth. Poza utworzeniem systemu logowania aplikacji konieczne jest stworzenie zabezpieczenia przed niepowołanym dostępem do podstron,
które dostępne mają być tylko dla zalogowanych użytkowników. Tutaj z pomocą przychodzi metoda preDispatch(), dostępna w każdym z kontrolerów aplikacji Zend Framework. Wywoływana jest ona jako pierwsza, przed wszystkimi akcjami danego kon-
Zend Framework w dyplomowym projekcie aplikacji internetowej
181
trolera. Aby zablokować dostęp do chronionych podstron omawianej aplikacji niepowołanym użytkownikom, wszystkie kontrolery, które zawierają akcje generujące te podstrony, dziedziczą z utworzonej w tym celu klasy bazowej, która w swojej metodzie
preDispatch() sprawdza czy użytkownik jest zalogowany i czy ma uprawnienia do wykonania danej akcji. Jeśli odpowiedź jest negatywna, to użytkownik zostaje przekierowany do akcji odpowiadającej za wyświetlenie formularza logowania.
Rys. 3. Diagram klas warstwy kontrolerów modułu Klienta w stworzonej aplikacji
Fig. 3. Class diagram for controllers layer of client's module in created application
Na rysunku 3 przedstawiono diagram klas wchodzących w skład warstwy kontrolerów modułu Klienta omawianej aplikacji. Widoczne jest na nim podział klas na dwie rodziny –
dziedziczących po Default_MainController i Default_ClientMainController. Obydwie klasy
zostały utworzone samodzielnie i dziedziczą z klasy bazowej dla wszystkich kontrolerów –
Zend_Controller_Action. Metoda preDispatch() klas Default_MainController oraz
Default_ClientMainController ma za zadanie sprawdzenie czy zalogowany użytkownik
ma prawo do wywołania akcji kontrolera dziedziczącego po tej klasie.
8. Podsumowanie
W niniejszym artykule starano się przedstawić te cechy Zend Fremwork, które zdaniem
autora, powinny pomóc w podjęciu decyzji o zastosowaniu tego frameworka w tworzonym
projekcie. Opisane w artykule podstawowe zagadnienia dają pogląd na to, w jaki sposób
przebiega tworzenie aplikacji z użyciem Zend Framework oraz jak można zorganizować
Izabela Woźnica
182
architekturę tworzonego systemu, aby stworzyć modułową aplikację internetową. Oczywiście, przedstawiony przykład wykorzystania Zend Framework obrazuje tylko niewielką
część jego możliwości.
Problematyczne jest znalezienie odpowiedniego źródła wiedzy dla początkujących
programistów Zend Framework, szczególnie jeśli chodzi o pozycje polskojęzyczne.
Jednak dzięki rosnącej popularności frameworka Zend sytuacja ta dynamicznie się
zmienia. Wart polecenia jest podręcznik Zend Framework [5], a także książki "Zend
Framework od Podstaw" [1] i "Beginning Zend Framework" [3].
Zdaniem autorki niniejszego artykułu warto stosować Zend Framework w projektach dyplomowych, ponieważ nabyte w ten sposób doświadczenie może okazać się przydatne
w późniejszyc projektach. Oprócz pogłębiania wiedzy dotyczącej wykorzystania coraz bardziej zaawansowanych funkcjonalności Zend Framework, dobrym rozwiązaniem wydaje się
być również rozwijanie umiejętności pracy z innymi frameworkami przeznaczonymi dla
języka PHP, aby dla konkretnego projektu móc wybrać najlepsze z dostępnych rozwiązań.
Literatura
1.
2.
3.
4.
5.
6.
Gajda W.: Zend Framework od podstaw. Helion, Gliwice 2011.
Merkel D.: PHP 5 Narzędzia dla ekspertów. Helion, Gliwice 2011.
Padilla A.: Beginning Zend Framework. Apress, New York 2009.
http://forum.php.pl/lofiversion/index.php/t70288.html [dostęp 11 kwietnia 2012]
http://framework.zend.com/manual/en/ [dostęp 11 kwietnia 2012]
http://zend-framework.pl/ [dostęp 11 kwietnia 2012]
Streszczenie
Artykuł przedstawia najważniejsze zagadnienia związane z tworzeniem aplikacji internetowej z wykorzystaniem technologii Zend Framework w ramach projektu dyplomowego.
Zawiera on opis rozpoczęcia pracy z Zend Framework oraz konfiguracji projektu, opis
architektury aplikacji i sposób jej działania. Zagadnienia przedstawione zostały na przykładzie bazodanowej aplikacji internetowej zrealizowanej jako projekt dyplomowy.
Zend Framework in a web application diploma
project
Summary
The article presents key issues of developing internet application for diploma project
using Zend Framework technology. It contains a description of getting started with Zend
Framework and the project configuration, description of application architecture and
how it works. The issues have been presented as case study of database web application
realized as a diploma project.

Podobne dokumenty