Raport końcowy (beta)

Implementacja bazy danych

Implementacja bazy danych została przeprowadzona zgodnie ze schematem opracowanym na etapie projektowania aplikacji. Pełny schemat bazy danych dostępny jest w formatach SQL: schema.sql oraz YAML: schema.yml

Zaprojektowana baza danych okazała się sprawiać pewne trudności, które można podzielić na trzy kategorie:

- problemy ze znalezieniem systemu ORM, który byłby w stanie obsługiwać zaprojektowany schemat; przykładowy problem: atrybut będący częścią klucza głównego jest jednocześnie kluczem obcym - większość tego rodzaju trudności została rozwiązana poprzez dopasowanie schematu bazy danych do możliwości systemu ORM.

- problemy z wydajnością systemu ORM; tutaj na szczególną uwagę zasługuje Doctrine, który okazał się prezentować wydajność zbliżoną do biblioteki Hibernate (Java), co jest wynikiem unikatowym, biorąc pod uwagę, że jest napisany w całości w języku PHP. Doctrine jest w stanie odczytać z bazy danych kilka powiązanych obiektów przy użyciu jednego zapytania (używając złączeń).

- problemy z możliwościami silnika bazy danych; przykładowo: aby odczytać listę produktów należących do danej kategorii (oraz kategorii podrzędnych) wymagane są funkcje operujące na strukturach drzewiastych (drzewo kategorii). Tego rodzaju funkcje dostępne są bardzo niewielu systemach baz danych (np. Oracle). Tutaj z odsieczą przychodzi (po raz kolejny) biblioteka Doctrine, oferując mechanizm tzw. behaviours (zachowań) - danej encji można przypisać zachowanie, np: Timestampable lub NestedSet. Zastosowanie zachowania NestedSet w stosunku do encji Category pozwaliło na operowanie na strukturze drzewiastej z logiką przeniesioną ze strony bazy danych, na stronę PHP (przy znikomej utracie wydajności!)

Zdefiniowanie interfejsów do prezentacji, edycji i obsługi danych

Poniżej przedstawione są formularze służące do wprowadzania danych. Ze względu na zastosowanie mapowania obiektowo-relacyjnego nie zostaną przedstawione zapytania SQL realizujące wprowadzenie odpowiednich danych do bazy. Dokładniejszy opis tego mechanizmu znajduje się w sekcji: Projektowanie Operacji Na Danych

Rejestracja użytkownika

Logowanie użytkownika

Dodawanie kategorii

Szybkie wyszukiwanie

Dodawanie produktu

Poszczególne pola formularza generowane są w zależności od atrybutów i grup atrybutów cechujących produkty w danej kategorii.

Zdefiniowanie dokumentów do przetwarzania i prezentacji danych

Poniżej przedstawione są wykorzystywane w aplikacji widoki umożliwiające prezentację danych.

Drzewo kategorii

Lista produktów w kategorii

Na przykładzie kategorii „Cell Phones”:

Widok atrybutów kategorii

Na przykładzie kategorii „Cell Phones”„

Widok produktu

Na przykładzie produktu „iPhone 4”:

Zdefiniowanie makropoleceń dla realizacji typowych operacji

Wykorzystana w projekcie biblioteka Doctrine zapewniająca mapowanie obiektowo-relacyjne, realizuje za Nas wszelkie operacje potrzebne do obsługi bazy danych.

Uruchamianie i testowanie aplikacji

Uruchomienie aplikacji oraz jej testowanie odbyło się dwuetapowo. Pierwszym etapem było uruchomienie aplikacji w lokalnym środowisku. Ze względu na stricte internetowy charakter aplikacji, testy przeprowadzono z wykorzystaniem narzędzia Selenium umożliwiającego przygotowywanie automatycznych testów dla aplikacji internetowych. Po pozytywnym przejściu tych testów, aplikacja została uruchomiona na zewnętrznym serwerze www, oraz udostępniona w sieci internet pod adresem: www.wikiitems.org.

Wprowadzanie danych

Do poprawnego uruchomienia aplikacji nie są wymagane żadne dane początkowe, jedynie poprawnie zaimportowany schemat bazy.

Wprowadzanie danych odbywa się ręcznie, poprzez formularze dostępne na stronie projektu.

Wdrażanie systemu do użytkowania

Wymagania:

- serwer WWW (Apache)

- PHP 5.3+

- Zend Framework 1.11.4+

- Doctrine 1.2

Konfiguracja Apache:

- DocumentRoot należy ustawić na katalog public_html

- należy ustawić opcję: AllowOverride All

- należy upewnić się, że włączone są moduły: php5_module, rewrite_module

Konfiguracja PHP:

- należy upewnić się, że włączone są moduły: php_soap, php_pdo_mysql (lub analogiczny, w zależności od używanej bazy danych)

- należy ustawić opcję: short_open_tag = On

- należy ustawić opcję: soap.wsdl_cache_enabled = 0 (lub 1, w przypadku gdy serwer będzie używany tylko na produkcji)

Konfiguracja projektu:

- ścieżka do biblioteki Zend Framework - w pliku public_html/index.php ustawiany jest include_path (funkcja set_include_path); należy zadbać by była tam aktualna ścieżka do biblioteki Zend Framework (/library) na danym serwerze

- ścieżka do biblioteki Doctrine - j/w

- baza danych - ustawienia w pliku /application/configs/application.ini (resources.doctrine.dsn)

- konto SMTP - ustawienia w pliku /application/configs/application.ini (resources.mail.*)

- ustawienia aplikacji Facebook (Appid, Key, Secret) - ustawienia w pliku /application/configs/application.ini (resources.facebook.*)

Konfiguracja bazy danych:

- w katalogu /public_html należy uruchomić: php doctrine.php build-all-reload

Przeprowadzenie szkolenia użytkowników

Wikiitems jest z założenia aplikacją kierowaną do ogólnoświatowej społeczności, stąd też przeprowadzanie szkoleń dla użytkowników mija się z celem. Interfejs aplikacji został maksymalnie uproszczony, zaprojektowano go tak, by był intuicyjny i nie sprawiał problemów nawet mniej doświadczonym internautom. Dzięki temu samodzielne nauczenie się obsługi aplikacji zajmuje zaledwie kilka minut.

Zapewnienie obsługiwania systemu po wdrożeniu

Od strony technicznej, zapewnienie działania systemu po wdrożeniu ogranicza się do utrzymywania działania serwera www oraz serwera baz danych. Z merytorycznej strony, aplikacja opiera się o ideę społecznościowej bazy danych, toteż jej zawartość moderowana i administrowane jest przez samych użytkowników, którzy wzajemnie kontrolują wprowadzane przez siebie zmiany.

Obecnie aplikacja znajduje się w fazie Beta. Administratorzy w szczególny sposób nadzorują działanie aplikacji. Użytkownikom został udostępniony Bug Tracking System (Mantis) w celu zgłaszania ewentualnych błędów lub sugestii.

Rozwijanie i modyfikowanie aplikacji

Aplikacja została zbudowana starannie, z troską o bezpieczeństwo, wydajność oraz możliwość wprowadzania dalszych modyfikacji. Tym niemniej, docelowo system przeznaczony jest do obsługi znacznej ilości żądań i prawdopodobnie konieczne będą znaczne modyfikacje (w przypadku sukcesu projektu!) mające na celu poprawienie wydajności.

Aplikacja - jak uważamy - posiada spory potencjał i może być rozbudowywana o nowe funkcjonalności. Oto niektóre z pomysłów:

- dodanie możliwości komentowania/oceniania produktów

- dodanie obsługi zdjęć produktów (potencjalne problemy natury prawnej)

- zbudowanie prostej aplikacji na Facebook'u, tak aby możliwe było wyszukanie produktu bezpośrednio w wyszukiwarce FB.

- integracja z porównywarkami cen (możliwość przeniesienia użytkownika ze strony produktu do sklepu internetowego).

- zbudowanie wtyczek do popularnych silników sklepów internetowych, tak aby dane techniczne towarów mogły być pobierane z aplikacji WikiItems (obecnie, sklepy internetowe niejednokrotnie kupują wspomniane dane)

- rozbudowa integracji z Facebook (zależne od rozbudowy FB API)

- integracja z różnorodnymi systemami e-commerce, również budowanymi w przyszłości

Opracowanie doświadczeń wynikających z realizacji projektu

Jednym z najistotniejszych doświadczeń związanych z projektowaniem i implementacją aplikacji WikiItems jest doświadczenie wynikające z realizacji aplikacji na podstawie wcześniej przygotowanej dokumentacji. Podejście takie, choć rzadko stosowane przez studentów daje możliwość wyeliminowania wielu błędów jeszcze przed rozpoczęciem implementacji.

Warto wspomnieć również o mechanizmie mapowania relacyjno-obiektowego, zapewnianym w Naszym projekcie przez bibliotekę Doctrine. Zapoznanie się z tym narzędziem znacznie ułatwiającym pisanie aplikacji wykorzystujących relacyjne bazy danych, zwłaszcza te, o dość złożonej strukturze, a za taką można uznać wykorzystywaną w projekcie bazę, jest bardzo pozytywnym doświadczeniem.

Wśród wykorzystanych narzędzi znalazło się również oprogramowanie Selenium. Umożliwiające przeprowadzanie automatycznych testów, z wykorzystaniem pluginu do przeglądarki Firefox. Narzędzie to pozwala m.in. na nagranie akcji użytkownika, a następnie odtworzenie ich, np. ze zmienionymi parametrami. Dzięki temu dość łatwo analizować błędy które mogą pojawiać się w trakcie implementacji kolejnych elementów interfejsu bądź samego silnika strony. Możliwości Selenium są oczywiście o wiele większe, dzięki narzędziu „Remote Control Server” można przeprowadzać automatyczne testy z wykorzystaniem dowolnej przeglądarki, jest to niezmiernie pomocne w przypadku testowania poprawności wyświetlania strony w różnych konfiguracjach. Funkcjonalność ta nie została jednak wykorzystana w projekcie.

W kwestii używanych technologii należy nadmienić, że PHP sprawdza się bardzo dobrze, głównie za sprawą bardzo dobrych bibliotek (Zend Framework, Doctrine). Tym niemniej, w stosunku to programowania w języku JAVA napotkaliśmy na pewnie niedogodności związane z dbaniem o jakość produktu. Wynika to z faktu, że PHP jest językiem interpretowanym oraz z dynamiczną typizacją - wiele błędów nie może zostać wykrytych na etapie budowania.

Wykaz literatury, załączniki

pl/dydaktyka/ztb/2011/projekty/wiki_items/raport_koncowy.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0