[[
✎ pl:dydaktyka:ztb:2011:projekty:wiki_items:raport_koncowy
]]
aiWiki
Pokaż stronę
Ostatnie zmiany
Indeks
Zaloguj
Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
====== 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: {{:pl:dydaktyka:ztb:2011:projekty:wiki_items:schema.sql|}} oraz YAML: [[http://exioo.com/upload/schema.yml|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 [[http://www.doctrine-project.org/|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: [[pl:dydaktyka:ztb:2011:projekty:wiki_items#projektowanie_operacji_na_danych|Projektowanie Operacji Na Danych]] **Rejestracja użytkownika** {{:pl:dydaktyka:ztb:2011:projekty:wiki_items:register.png|}} **Logowanie użytkownika** {{:pl:dydaktyka:ztb:2011:projekty:wiki_items:login.png|}} **Dodawanie kategorii** {{:pl:dydaktyka:ztb:2011:projekty:wiki_items:newcat.png|}} **Szybkie wyszukiwanie** {{:pl:dydaktyka:ztb:2011:projekty:wiki_items:qsearch.png|}} **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. {{:pl:dydaktyka:ztb:2011:projekty:wiki_items:addphone.png|}} ===== Zdefiniowanie dokumentów do przetwarzania i prezentacji danych ===== Poniżej przedstawione są wykorzystywane w aplikacji widoki umożliwiające prezentację danych. **Drzewo kategorii** {{:pl:dydaktyka:ztb:2011:projekty:wiki_items:vcats.png|}} **Lista produktów w kategorii** Na przykładzie kategorii "Cell Phones": {{:pl:dydaktyka:ztb:2011:projekty:wiki_items:vcatphones.png|}} **Widok atrybutów kategorii** Na przykładzie kategorii "Cell Phones"" {{:pl:dydaktyka:ztb:2011:projekty:wiki_items:vtelephons.png|}} **Widok produktu** Na przykładzie produktu "iPhone 4": {{:pl:dydaktyka:ztb:2011:projekty:wiki_items:iphone4.png|}} ===== Zdefiniowanie makropoleceń dla realizacji typowych operacji ===== Wykorzystana w projekcie biblioteka [[http://www.doctrine-project.org/|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 [[http://seleniumhq.org/|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: [[http://www.wikiitems.org|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 ([[http://httpd.apache.org/|Apache]]) - [[http://www.php.net/|PHP]] 5.3+ - [[http://framework.zend.com/|Zend Framework]] 1.11.4+ - [[http://www.doctrine-project.org/|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 [[http://issues.wikiitems.org|Bug Tracking System]] ([[http://www.mantisbt.org/|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 ([[http://framework.zend.com|Zend Framework]], [[http://www.doctrine-project.org/|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 ===== http://www.doctrine-project.org/docs/orm/2.0/en/reference/introduction.html#the-orm-package http://www.doctrine-project.org/projects/orm/1.2/docs/manual/yaml-schema-files/en http://developers.facebook.com/docs/ http://pl.wikipedia.org/wiki/Normalizacja_bazy_danych Źródła: [[http://subversion.assembla.com/svn/wiki-items/|SVN]]
pl/dydaktyka/ztb/2011/projekty/wiki_items/raport_koncowy.txt
· ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
Pokaż stronę
Poprzednie wersje
Menadżer multimediów
Do góry