|
|
pl:dydaktyka:ztb:2010:projekty:pdon:start [2010/07/02 10:40] ztb2010 |
pl:dydaktyka:ztb:2010:projekty:pdon:start [2019/06/27 15:50] |
==== Sformułowanie zadania projektowego: ==== | |
| |
Celem projektu jest niesienie pomocy osobom niepełnosprawnym. Osoby takie bardzo | |
często z uwagi na swoje ograniczone możliwości, są pozbawione przyjemności | |
uczestnictwa w wielu dziedzinach życia. Naszym zadaniem, a właściwie obowiązkiem | |
wobec takich osób, jest możliwe udostępnienie pomocnych narzędzi, aby takie osoby nie czuły | |
się ograniczone w żaden dodatkowy sposób. | |
| |
Z racji rozwijających się w ogromnym tempie możliwości jakie dają media (szczególnie | |
Internet), postanowiliśmy stworzyć kompleksowy serwis, który byłby pomocny w | |
korzystaniu z tego medium. W serwisie będą znajdowały się zarówno narzędzia jak i | |
wszelkie potrzebne informacje na ich temat. | |
| |
Stwarzałby on nieograniczone możliwości dla producentów sprzętu rehabilitacyjnego, | |
lekarzy i klinik, które mogłyby na jego łamach przedstawiać najnowsze możliwości leczenia lub niwelowania ograniczeń swoich pacjentów. | |
Będzie to jedyne miejsce, gdzie osoby niepełnosprawne będą mogły wymieniać się | |
uwagami oraz spostrzeżeniami na wiele tematów ze swojego życia. | |
| |
==== Analiza stanu wyjściowego ==== | |
| |
W chwili obecnej w sieci można znaleźć podobne rozwiązania, jednak są one | |
stworzone bardzo prowizorycznie, a ich funkcjonalność jest bardzo ograniczona. Każdy | |
z takich serwisów, przedstawia jedynie fragment możliwości naszego serwisu, na | |
przykład oferuje wybrane narzędzia pomocy niepełnosprawnym. | |
Dużo, z obecnie działających rozwiązań ma charakter dodatku do bardziej | |
rozbudowanych serwisów nie traktujących o tematyce naszego projektu (udostępnianie | |
programów dla niepełnosprawnych w serwisie, który oferuje wszelkie rodzaje | |
dostępnych programów). | |
| |
Nasz serwis byłby kompleksowym rozwiązaniem i pewnym miejscem, gdzie ludzie | |
dotknięci przez swoje ograniczenia mogliby udać się w poszukiwaniu pomocy. | |
W trakcie rozwoju serwisu, umożliwiłoby to zostanie liderem w tej tematyce i dalszą | |
promocję. Niniejszym stałby się popularny i pomocny w popularyzowaniu szczególnych | |
rozwiązań. To z pewnością przyczyniłoby się do wykorzystania wyznaczonego miejsca | |
w serwisie na płatną promocję produktów oferowanych przez jego sponsorów. | |
| |
| |
==== Analiza wymagań użytkownika ==== | |
| |
* możliwość rejestracji i logowanie | |
* przeglądanie i korzystanie ze zbiorów artykułów i narzędzi | |
* dodawanie i edycja artykułów i narzędzi przez zarejestrowanych uzytkowników | |
* dodawanie komentarzy przez zarejestrowanych użytkowników | |
* przeglądanie forum | |
* dodawanie działów i tematów na forum przez zarejestrowanych użytkowników | |
* dodawanie postów przez zarejestrowanych uzytkowników | |
===== Określenie scenariuszy użycia===== | |
| |
- Jako niezalogowany użytkownik serwisu, chcę założyć nowe konto, aby móc się zalogować do serwisu. | |
- Jako użytkownik serwisu, chcę przejść na listę dostępnych artykułów w wybranej kategorii, aby móc przeczytać wybrany z nich. | |
- Jako użytkownik serwisu, chcę przejść na stronę wyszukiwarki, aby odnaleźć interesujące mnie informacje. | |
- Jako zalogowany użytkownik serwisu, chcę zmienić swoje dane personalne, aby zaktualizować swoje dane osobowe w związku ze zmianą miejsca zamieszkania. | |
- Jako zalogowany użytkownik serwisu, chcę wejść na forum dyskusyjne, aby rozpocząć nowy temat dyskusji. | |
- Jako użytkownik serwisu, chcę zobaczyć listę dostępnych narzędzi wspomagania pracy z komputerem dla osób niepełnosprawnych, aby ściągnąć i zainstalować wybrany program, który najlepiej spełnia moje oczekiwania. | |
- Jako zalogowany użytkownik serwisu, chcę wysłać wiadomość do innego użytkownika serwisu, aby uzyskać dodatkowe informacje. | |
- Jako zalogowany użytkownik serwisu, chcę skomentować czytany przeze mnie artykuł, aby podzielić się swoim zdaniem i dodać kolejne informacje. | |
- Jako administrator serwisu, chcę wejść na stronę serwisu, i usuwam reklamy i zbędne komentarze pozostawione przez roboty spamujące aby zachować przejrzystość serwisu. | |
- Jako zalogowany użytkownik, chcę zgłasosić propozycję dodania do zasobów portalu nowego programu, bądź propozycji programu, aby pomóc innym użytkownikom. | |
- Jako pracownik instytucji trzecich, chcę odnaleźć osoby potrzebujące, aby popularyzować swoją organizację charytatywną wśród grupy docelowej. | |
=====Identyfikacja funkcji ===== | |
| |
Funkcje dla administratora: | |
| |
* Logowanie jako administrator | |
* Modyfikowanie strony głównej | |
* Modyfikowanie profilu użytkownika | |
* Modyfikowanie strony Artykułu | |
* Modyfikowanie strony Programu | |
* Usuwanie artykułów | |
* Usuwanie programów | |
* Moderacja forum | |
* Zakładanie nowych działów forum | |
| |
Funkcje dla użytkownika: | |
* Logowanie jako użytkownik | |
* Rejestracja użytkownika | |
* Komentowanie artykułów | |
* Komentowanie programów | |
* Tworzenie nowych tematów na forum | |
* Publikowanie nowych opisów programu | |
* Publikowanie nowych Artykułów | |
| |
| |
===== Analiza hierarchii funkcji projektowanej aplikacji ===== | |
| |
| |
{{:pl:dydaktyka:ztb:2010:projekty:pdon:analiza_hierarchii.png?640|}} | |
| |
| |
| |
| |
===== Budowa i analiza diagramu przepływu danych ===== | |
TODO | |
| |
Wybór encji (obiektów) i ich atrybutów | |
| |
<code> | |
Role | |
id integer | |
name string | |
authorizable_type string | |
authorizable_id integer | |
created_at datetime | |
updated_at datetime | |
| |
Program | |
id integer | |
name string | |
platform string | |
summary text | |
content text | |
tags string | |
author_id integer | |
creator string | |
created_at datetime | |
updated_at datetime | |
href string | |
download_href string | |
| |
Article | |
id integer | |
name string | |
content text | |
author_id integer | |
created_at datetime | |
updated_at datetime | |
summary text | |
type string | |
slug string | |
Page | |
id integer | |
name string | |
content text | |
author_id integer | |
created_at datetime | |
updated_at datetime | |
summary text | |
type string | |
slug string | |
| |
User | |
id integer | |
email string | |
activity_id integer | |
fullname string | |
nick string | |
crypted_password string | |
password salt string | |
persistance_token string | |
single_access_token string | |
persihable_token string | |
login_count integer | |
failed_login_count integer | |
last_request at datetime | |
current_login_at datetime | |
last_login_at datetime | |
created_at datetime | |
updated_at datetime | |
is_admin boolean | |
| |
RoleUser | |
id integer | |
role_id integer | |
user_id integer | |
state string | |
created_at datetime | |
updated_at datetime | |
| |
DiggedSiteDigg | |
id integer | |
user_id integer | |
digged_site_id integer | |
created_at datetime | |
updated_at datetime | |
| |
InternalMessage | |
id integer | |
sender_id integer | |
receiver_id integer | |
subject string | |
parent_id integer | |
content text | |
xreated_at datetime | |
updated_at datetime | |
| |
ForumSection | |
id integer | |
name string | |
description text | |
created_at datetime | |
updated_at datetime | |
| |
Comment | |
id integer | |
author_id integer | |
content string | |
commentable_types string | |
commentable_id string | |
created_at datetime | |
updated_at datetime | |
| |
DiggedSite | |
id integer | |
author_id integer | |
href string | |
comment text | |
state string | |
click_count integer | |
created_at datetime | |
updated_at datetime | |
| |
ForumPost | |
id integer | |
subject_id integer | |
author_id integer | |
content text | |
type string | |
created_at datetime | |
updated_at datetime | |
name string | |
forum_section_id integer | |
| |
ForumTopic | |
id integer | |
subject_id integer | |
author_id integer | |
content text | |
type string | |
created_at datetime | |
updated_at datetime | |
name string | |
forum_section_id integer | |
| |
</code> | |
| |
===== Projektowanie powiązań (relacji) pomiędzy encjami ===== | |
| |
{{:pl:dydaktyka:ztb:2010:projekty:pdon:graf_bazy.png?640|}} | |
=====Projekt diagramów STD ===== | |
| |
**Diagram obsługi Artykułów (diagram dla Narzędzi jest analogiczny):** | |
| |
{{:pl:dydaktyka:ztb:2010:projekty:pdon:std1.png?640|}} | |
| |
| |
**Diagram obsługi forum:** | |
| |
{{:pl:dydaktyka:ztb:2010:projekty:pdon:std2.png?640|}} | |
| |
| |
| |
| |
| |
| |
**Projektowanie tabel, kluczy, kluczy obcych, powiązań między tabelami, indeksów, etc. w oparciu o zdefiniowany diagram ER** | |
| |
<code sql> | |
| |
| |
CREATE TABLE IF NOT EXISTS comments ( | |
| |
</code> | |
| |
| |
===== Analiza zależności funkcyjnych i normalizacja tabel (dekompozycja do 3NF, BCNF, 4NF, 5NF)===== | |
// TODO | |
| |
===== Projektowanie operacji na danych===== | |
Operacje na danych realizowane są przy użyciu frameworka do mapowania obiektowo-relacyjnego dla języka Ruby - ActiveRecord. Dzięki temu, operacje na danych są ekstremalnie proste, np. | |
| |
<code ruby> | |
@resource = User.find(1) # wyszukiwanie po id | |
@resource = Article.find_by_slug('Home') # wyszukiwanie po nazwie zawartej w adresie | |
@resources = Article.all(:limit => 10, :offset => 10) | |
# wyszukanie 10 rekordów z przesunięciem o 10 | |
@resource = User.create(params[:user]) # tworzenie rekordu | |
@resource = User.find(1).destroy # usuwanie rekordu | |
</code> | |
| |
Dodatkowo, dzięki wykorzystaniu biblioteki warstwy kontrolera InheritedResources, wyeliminowana została konieczność definiowania akcji użytkownika explicite. Zamiast tego, generowany jest zestaw metod: | |
| |
<code ruby> | |
new | |
index | |
show(id) | |
edit(id) | |
create(id) | |
update(id) | |
destroy(id) | |
</code> | |
| |
Metody te same w sobie zawierają kod, który umożliwia operacje na danych. Na przykład, metoda create będzie miała następujący kształt, pomimo tego, że w kodzie kontrolera sie nie pojawi: | |
| |
<code ruby> | |
def create | |
@resource = RESOURCE_CLASS.new(params[RESOURCE_NAME]) | |
# utworzenie rekordu aktywnego o zadanych parametrach | |
if @resource.save # zapis do bazy danych | |
# wyrenderuj widok poprawny | |
else | |
# wyrenderuj stronę błędu | |
end | |
end | |
</code> | |
| |
gdzie: | |
| |
* RESOURCE_CLASS to klasa warstwy modelu związana z danym kotrnolerem, np. Article | |
* RESOURCE_NAME to nazwa zasobu używana do przekazywana parametru, np. article | |
| |
===== Implementacja bazy danych ===== | |
| |
Baza danych została zaimplementowana na silniku mySQL w wersji 5.1. Do jej obsługi używana jest biblioteka ActiveRecord w wersji 3.0.0.beta4, będąca standardowym mechanizmem frameworku Ruby on Rails 3. | |
| |
* mysql: 5.0.75-0ubuntu10.5 | |
* rubygems 1.3.6 | |
* Ruby on Rails 3 beta 4 | |
| |
oraz gemy: | |
| |
* abstract (1.0.0) | |
* actionmailer (3.0.0.beta4) | |
* actionpack (3.0.0.beta4) | |
* activemodel (3.0.0.beta4) | |
* activerecord (3.0.0.beta4) | |
* activeresource (3.0.0.beta4) | |
* activesupport (3.0.0.beta4) | |
* arel (0.4.0) | |
* authlogic (2.1.3 a087ad) | |
* builder (2.1.2) | |
* bundler (0.9.26) | |
* dispatcher (0.0.1) | |
* erubis (2.6.6) | |
* formtastic (1.0.0.beta 0c0a9e) | |
* haml (3.1.0 9340ac) | |
* has_scope (0.5.0 0a8c58) | |
* i18n (0.4.1) | |
* inherited_resources (1.1.2) | |
* mail (2.2.5) | |
* mime-types (1.16) | |
* polish (0.0.4 8cfbb3) | |
* polyglot (0.3.1) | |
* rack (1.1.0) | |
* rack-mount (0.6.6) | |
* rack-test (0.5.4) | |
* rails (3.0.0.beta4) | |
* railties (3.0.0.beta4) | |
* rake (0.8.7) | |
* responders (0.6.1 3af189) | |
* thor (0.13.7) | |
* treetop (1.4.8) | |
* tzinfo (0.3.22) | |
* will_paginate (3.0.pre 60aa1c) | |
| |
===== Zdefiniowanie interfejsów do prezentacji, edycji i obsługi danych ===== | |
| |
**Rejestracja uzytkownika:** | |
| |
{{:pl:dydaktyka:ztb:2010:projekty:pdon:gui1.png?640|}} | |
| |
**Logowanie użytkownika:** | |
| |
{{:pl:dydaktyka:ztb:2010:projekty:pdon:gui2.png?640|}} | |
| |
**Dodanie/modyfikacja artykułu:** | |
| |
{{:pl:dydaktyka:ztb:2010:projekty:pdon:gui3.png?640|}} | |
| |
**Dodanie/modyfikacja programu:** | |
| |
{{:pl:dydaktyka:ztb:2010:projekty:pdon:gui4.png?640|}} | |
| |
**Dodanie komentarza:** | |
| |
{{:pl:dydaktyka:ztb:2010:projekty:pdon:gui5.png?640|}} | |
| |
**Utworzenie nowego działu na forum:** | |
| |
{{:pl:dydaktyka:ztb:2010:projekty:pdon:gui6.png?640|}} | |
| |
**Utworzenie nowego tematu na forum:** | |
| |
{{:pl:dydaktyka:ztb:2010:projekty:pdon:gui7.png?640|}} | |