items as $sale) { $this->data->acceptTransaction($sale); $result = true; } Sprzedane książki są po prostu zaznaczane - nie potrzebujemy więcej informacji. Wołamy dla nich odpowiednią procedurę…">

Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 11.

Podobne prezentacje


Prezentacja na temat: "Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 11."— Zapis prezentacji:

1 Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 11

2 DataReactor Poprzednio przygotowaliśmy edycję książek – teraz musimy zapisać zmiany w bazie Mieliśmy sześć typów edycji – potrzebujemy reaktora który wszystkie obsłuży Edycje danych poszczególnych typów są obsługiwane przez kontrolki o różnych nazwach Możemy je umieścić w jednym reaktorze

3 Potwierdzenie sprzedaży function processData() { $result = false; // processing acknowledge the sale $sold = new SelectedItems("sold"); foreach ($sold->items as $sale) { $this->data->acceptTransaction($sale); $result = true; } Sprzedane książki są po prostu zaznaczane - nie potrzebujemy więcej informacji. Wołamy dla nich odpowiednią procedurę…

4 Potwierdzenie sprzedaży… function acceptTransaction($transactionID) { $rs = $this->database->query(" select OffersUsers.UsersID, Offers.OffersID, UsersBooksID from OffersUsers inner join Offers on OffersUsers.OffersID = Offers.OffersID where OffersUsersID=$transactionID;"); $data = $rs->get(); $buyerID = $data[0]; $offerID = $data[1]; $ownership= $data[2]; $this->database->query( update UsersBooks set UsersID = $buyerID where UsersBooksID=$ownership;"); $this->database->query( delete from OffersUsers where OffersUsersID=$transactionID;"); $this->database->query( delete from Offers where OffersID=$offerID;"); }

5 Anulowanie sprzedaży Anulowanie jest równie proste jak zatwierdzenie a nawet prostsze: // processing canceling the sale $canceled = new SelectedItems("canceled"); foreach ($canceled->items as $sale) { $this->data->cancelTransaction($sale); $result = true; } function cancelTransaction($transactionID) { $this->database->query(" delete from OffersUsers where OffersUsersID=$transactionID;"); }

6 Zgubione książki // processing lost books $lost = new SelectedItems("lost"); foreach ($lost->items as $drop) { $this->data->bookWasLost($drop, $this->user); $result = true; } W kodzie reaktora zgubionych książek nie ma nic więcej, ale część bazodanowa jest nieco bardziej skomplikowana

7 Zgubione książki … function bookWasLost($bookId, $userId) { $rs = $this->database->query(" select UsersBooks.UsersBooksID, Offers.OffersID, OffersUsers.OffersUsersID from UsersBooks left outer join Offers on offers.UsersBooksID= UsersBooks.UsersBooksID left outer join OffersUsers on OffersUsers.OffersID= Offers.OffersID where UsersBooks.UsersID=$userId and UsersBooks.BooksID=$bookId;"); $rs = $rs->get(); $own = $rs[0]; $sale = $rs[1]; $buy = $rs[2];

8 Zgubione książki … if ($buy != "") { $this->database->query(" delete from OffersUsers where OffersUsersID=$buy;"); } if ($sale != "") { $this->database->query(" delete from Offers where OffersID=$sale;"); } if ($own != "") { $this->database->query(" delete from UsersBooks where UsersBooksID=$own;"); }

9 To proste Taki podział zadań znacznie upraszcza programowanie Każde z elementarnych zadań jest proste Programując – możemy koncentrować się na pojedynczych elementach funkcjonalności Każdy z elementów można niezależnie uruchamiać i co ważniejsze - testować

10 Oferta sprzedaży $toSell = new SelectedItems("sellId"); $sell = new SelectedItems("sell"); foreach ($toSell->items as $selling) { if ($sell->is($selling)) { $comment = new Control("comment". $selling, ""); $price = new Control("price". $selling, ""); $comment = $comment->value; $price = str_replace(",", ".", $price->value); $this->data->editorAddOffer($selling, $this->user, $comment, $price); } else { $this->data->removeOffer($selling, $this->user); } $result = true; }

11 Oferta sprzedaży … Zauważmy, że oferta może być składana lub odwoływana Potrzebujemy dwu procedur do obsługi tych zadań Drobna komplikacja: potrzebujemy rozróżnić poprawianie i dodawanie function editorAddOffer($bookId, $userId, $comment, $price) { $rs = $this->database->query(" select UsersBooks.UsersBooksID, Offers.OffersID from UsersBooks left outer join Offers on Offers.UsersBooksID= UsersBooks.UsersBooksID where UsersBooks.UsersID=$userId and UsersBooks.BooksID=$bookId;");

12 Oferta sprzedaży … $rs = $rs->get(); if ($rs[1] == "")// add new offer entry { $this->database->query(" insert into Offers( UsersBooksID, OffState, OffPrice) values(". $rs[0]. ", '$comment', $price);"); } else { $this->database->query(" update Offers set OffState = '$comment', OffPrice = $price where OffersID = ". $rs[1]. ";"); }

13 Zakupy! $offers = new SelectedItems("offers"); foreach ($offers->items as $bookId) { $offerId = new Control("take". $bookId, ""); $offerId = $offerId->value; if ($offerId == -1) { $this->data->setHaveBook($bookId, $this->user); } else if ($offerId != "") { $this->data->setAcceptOffer($offerId, $this->user); } $result = true; }

14 Pozostałe dane Dotychczas koncentrowaliśmy się na najczęściej używanej funkcjonalności Pozostaje jeszcze przygotowanie danych: Listy i danych książek Listy użytkowników Listy grup Edycja tych danych nie jest potrzebna, trzeba je tylko wprowadzić do systemu

15 Import! Zamiast przygotowywać formatki dla każdego typu danych – przygotujemy import danych Dane książek są bardzo złożone: Tytuł, Lista autorów! Inne dane (także listy) Uniwersalną strukturą jest XML – ale potrzebujemy analizator (parser)

16 Inne formaty Lista użytkowników na stałą strukturę Imię Nazwisko Login Hasło Inne dane (jeśli będą potrzebne) Takie dane mogą być w formacie CSV Taki format można wyciągnąć z Excela – to wygodne bo w takim formacie są zazwyczaj listy uczniów

17 Inne formaty... Grupy są tylko nazwami, ale… Są także grupy grup! Format plików INI będzie odpowiedni Trzy różne formaty pozwalają rozpoznawać typ danych Jeśli dane zaczynają się od < – to są to ksiązki (XML) Jeśli dane zaczynają się od [ – to są to grupy (INI) W przeciwnym wypadku – są to użytkownicy (CSV)

18 Strona importu

19 Przypisania Warto także przygotować stronę która pozwoli na przypisanie uczniów i książek do grup

20 Czy to już koniec ? Czy nasza aplikacja jest gotowa ? Cała funkcjonalność jest przygotowana Program pozwala na pracę Można go zainstalować u klienta I można zacząć liczyć przyszłe zyski Ale to dopiero początek! Program działa tak jak sobie to wyobraża programista a nie jak potrzebuje uzytkownik.

21 To dopiero początek Teraz musimy zapytać czego potrzebuje użytkownik Proponowana przez nas aplikacja jest punktem wyjścia Użytkownik może a nawet powinien zaproponować zmiany i funkcjonalność z której wcześniej nawet sobie nie wyobrażał I zrobi to niekoniecznie od razu

22 Bez względu na… Jeśli nasza aplikacja była pisana na zamówienie – teraz możemy zweryfikować na ile rozumiemy problem jaki postawił użytkownik. I teraz użytkownik zaczyna rozumieć czego naprawdę potrzebuje. Gdy dostanie nową wersję – zrozumie więcej i kolejne zmiany będą konieczne w programie Ale możemy liczyć na zysk.

23 Bez względu na… Jeśli pomysł na aplikację był naszego autorstwa – teraz jest czas na jego weryfikację Programu jeszcze nie można sprzedać – najpierw musi się sprawdzić Instalacja nieznanego programu to są koszta również dla klienta (serwer, administracja przeszkolenie użytkowników itp..) Nie można go dodatkowo obciążać

24 Liczymy zyski Pojedynczy klient nigdy nie sfinansuje całego programu Tym bardziej taki u którego instalujemy program w ramach instalacji testowej lub pilotażowej Ale mamy produkt – teraz trzeba znaleźć inwestorów I przygotować propozycje – jak na aplikacji można zarobić

25 Zysk W naszym przypadku – mamy kilka możliwości zysku: Opłaty licencyjne Finansowanie przez fundację Wyświetlanie reklam. Prowizja od sprzedaży Połączenie z inną – komercyjną działalnością Sprzedanie aplikacji komuś kto wie jak na niej zarobić

26 Zysk… Opłaty licencyjnie w naszym przypadku nie wchodzą w grę – kto miałby płacić? Fundacja – to jest pomysł ! – ale tu możemy liczyć tylko na jednorazowy zysk w ramach jakiegoś eko- przyjaznego programu Wyświetlanie reklam nie wyjdzie – program będzie używany sporadycznie – w na początku roku szkolnego

27 Zysk… Prowizja od sprzedaży – nie wyjdzie – jak wyegzekwować takie groszowe opłaty od uczniów Połączenie z inną – komercyjną działalnością – to wygląda obiecująco Połączenie ze sprzedażą nowych książek i zysk z prowizji od księgarni/hurtowni Sprzedanie aplikacji komuś kto wie jak na niej zarobić – nie warto!

28 Co by tu jeszcze Zarządzanie kontem użytkownika Hasło Dane kontaktowe Powiadamianie mailem o transakcji Terminarz pozwalający na automatyczne uzgadnianie terminów przekazania kupionych książek Zakup nowych książek poprzez aplikację – zamawianie z hurtowni

29 Co by tu jeszcze … Rozliczenia między użytkownikami – aby nie musieli rozliczać się gotówkowo – system może bilansować wzajemne długi a pozostałe rozliczenia załatwiać zbiorczo przez skarbników szkolnych Przy okazji wyjdzie system zbierania pieniędzy na nowe podręczniki zamawiane w hurtowni

30 Co by tu jeszcze … Wypożyczenia książek pomiędzy użytkownikami systemu Antyprzypisania – zapisanie się na fakultet który wymaga rozszerzonych podręczników likwiduje potrzebę posiadania podstawowych Opcja nie chcę – do oznaczenia podręczników których uczeń nie chce kupować mimo, że są potrzebne

31 A co na to użytkownicy To są propozycje które w czasie pracy przyszły do głowy programistom A co będą chcieli użytkownicy – to się okaże w ciągu jej użytkowania… Listę propozycji będziemy realizować sukcesywnie zależnie od Komplikacji zmian Potrzeby użytkowników Możliwości technologicznych Wiedzy programistów

32 Koniec Kiedy następuje koniec prac nad aplikacją? W zasadzie nigdy! Jeśli aplikacja przestaje mieć sens – wtedy jej życie się kończy Ale to oznacza koniec zysków! Do tego czasu – ulega ciągłemu rozwojowi i ciągłym zmianom


Pobierz ppt "Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 11."

Podobne prezentacje


Reklamy Google