SQLite & PDO SQLite support missing in this PHP install - plugin will not work

AdTamer

Poniżej jest umieszczana automatycznie treść podstrony adtamer znajdującej się w namespace projektu. Proszę ją utworzyć i traktować jako stronę startową - tam umieszczamy linki do poszczególnych podstron, które też mają się znajdować w projekcie, np. analiza_wymagan. W namespace mogą też Państwo umieszczać pliki (obrazki, diagramy, archiwa) linkowane na stronie danego projektu. Proszę usunąć ten akapit po zapoznaniu się z jego treścią.

Sformułowanie zadania projektowego

Reklama jest kluczowym zagadnieniem dla każdego przedsiębiorstwa. Jednym z popularniejszych mediów przekazuw obecnych czasach staje się Internet. Dla przedsiębiorstw z liczną ofertą produktów ogłoszenia detaliczne, zamieszczane w dedykowanych serwisach internetowych, stają się niezbędnym elementem kampanii reklamowej. Podczas pracy natknąłem się na deficyt programów które umożliwiają zamieszczanie ogłoszeń na kilku portalach jednocześnie. Powstał pomysł na stworzenie oprogramowania które wypełniało by lukę na rynku programów do zarządzania reklamą. Program AdTamer ma za zadanie kompleksowe zarządzanie ogłoszeniami zamieszczonymi w serwisach internetowych. Sparowany z bazą danych klienta będzie reagował na zmiany w ofercie. Ogłoszenia nie aktywne będą usuwane a nowe towary będą proponowane do wystawienia. Głównym celem programu jest zminimalizowanie czasu potrzebnego do zarządzania ogłoszeniami oraz wprowadzenie ścisłej kontroli nad nimi. Takie rozwiązanie pozwoli uzyskać klientowi znaczącą przewagę jeśli chodzi o rynek internetowy nad konkurencją ponieważ jego oferta będzie doskonale widoczna i zawsze aktualna przy minimalnym nakładzie sił.

Analiza stanu wyjściowego

Z uwagi na znaczną ilość istniejących portali ogłoszeniowych oraz wstępne zainteresowanie ze strony klienta podobnym rozwiązaniem projekt został ograniczony do portali w branży maszyn budowlanych. Jednocześnie na chwile obecną przewidziane jest sparowanie z już istniejącym oprogramowaniem Integra ( Opis programu: http://www.integra.info.pl/info.php?page=integrafirma) . Program nie udostępnia żadnego interfejsu komunikacyjnego z zewnętrznymi programami. Oprogramowanie Integra korzysta z serwera SQL Server 2000 dzięki czemu możliwe jest pobieranie danych wprowadzonych przez użytkownika. Dodatkowo wykorzystywany jest na serwerze klienta serwer FTP do zarządzania zdjęciami dodanymi w programie. Z uwagi na poufność informacji biznesowych, dostęp do serwera w tym bazy danych i serwera FTP jest możliwy jedynie z wewnątrz sieci klienta. Program docelowo ma zamieszczać ogłoszenia na portalu ogłoszeniowym klienta, na którym znajduje się baza danych MySQL 5.0 oraz w zewnętrznych serwisach internetowych za pośrednictwem mechanizmu Web Services. Należy dodać, że program Integra jest dedykowany dla branży samochodowej gdzie jeden produkt pasuje do kilku pojazdów lub jest stosowany jako zamiennik. Cecha ta musi zostać uwzględniona podczas tworzenia programu AdTamer tak by ten korzystała z bazy wiedzy klienta o zamiennikach.

Analiza wymagań użytkownika

Do podstawowych funkcjonalności systemu należą:

Zarządzanie ogłoszeniami w tym dodawania, edycja, usuwanie w serwisach internetowych

  • Mechanizm przeszukiwania towarów pod kątem nie zamieszczonych lub nieaktualnych ogłoszeń. Z dodatkowym mechanizmem filtracji po Kategorii, pod kategorii, cenie, ilości sztuk
  • Mechanizm przeszukiwania ogłoszeń pod kątem nieaktualnych ogłoszeń. Z dodatkowym mechanizmem filtracji po polach: Czas zamieszczenia, czas edycji, zmiany na magazynie
  • Sygnalizacja zmian w towarach na magazynie pod kątem nieaktualności informacji w ogłoszeniach.
  • Wymagania związane z bezpieczeństwem systemu:
  • Zachowanie bezpieczeństwa danych po przez system identyfikacji i autoryzacji użytkowników
  • Zachowanie bezpieczeństwa poprzez brak przechowywania jakichkolwiek danych wrażliwych w źródle programu
  • Zachowanie wszystkich zmian wprowadzonych przez użytkowników z możliwością odtworzenia historii operacji.
  • Łatwe dodawanie obsługi kolejnych serwisów internetowych przez mechanizm plug in

Dodatkowe wymagania:

  • Brak przestojów w czasie pracy programu podczas operacji wejścia-wyjścia
  • Program AdT amer w żaden sposób nie może ingerować w baze danych programu Integra
  • Możliwie jak największe zautomatyzowanie procesu tworzenia ogłoszenia po przez przepisanie z Towaru do ogłoszenia danych, generacja tytułów oraz automatyczny wybór kategorii i pod kategorii w serwisie.
  • Przyśpieszenie wyszukiwania powtarzalnych typów ogłoszeń jak i towarów.
  • Program umożliwia prace w trybie offline
  • Możliwie łatwe dobudowanie obsługi nowych serwisów

Określenie przypadków oraz scenariuszy użycia

  1. Ordered List Item
  2. Logowanie do systemu - Użytkownik podaje swój login oraz hasło, na podstawie tych informacji wyświetlane w programie są opcje do których jest dopuszczony.
  3. Zmiana ustawień konta – Użytkownik zmienia swoje hasło dostępu do programu.
  4. Dodawanie nowego użytkownika – Po wybraniu opcji nowego użytkownika administrator nadaje login oraz hasło, ponadto przydziela prawa dostępu do funkcji w programie.
  5. Tworzenie ogłoszenia – użytkownik po wybraniu Towaru przechodzi do panelu tworzenia nowego ogłoszenia gdzie wybiera serwis/serwisy w jakim ma być zamieszczone ogłoszenie, wybiera wzorcowy tytuł oraz treść ogłoszenia, wybiera zdjęcia a następnie generuje ogłoszenia na podstawie wcześniej wybranych opcji. Po zatwierdzeniu ogłoszenie jest zamieszczane w wybranych serwisach. [ Scenariusz użycia: Użytkownik wybiera silnik spalinowy Deutz 913, ogłoszenie ma być zamieszczone w serwisie www.maszynybudowlane-czesci.pl oraz www.tabor24.pl, wybrany towar pasuje do 35 maszyn m. in. Liebher 564, Liebher 912, Cat 320 z czego użytkownik wybiera Liebherra 564 oraz Cat 320 do generowania ogłoszeń. Podaje tytuł w szablonie: „Silnik spalinowy do [marka][typ]”, w treści : „W doskonałym stanie używany silnik spalinowy do [marka][typ]”, dodatkowo wybiera 2 zdjęcia z 5 które mają być zamieszczone, następnie generowane są 4 ogłoszenia z odpowiednio wpisanymi markami i typami. Podczas generacji z szablonu kategorii maszyn budowlanych dla strony www.maszynybudowlane-czesci.pl zaznaczona zostaje kategoria: silniki spalinowe, podkategoria: Perkins, z kolei na stronie www.tabor24.pl, kategoria: maszyny budowlane, podkategoria: części, użytkownik zmienia podkategorie dla strony www.tabor24.pl na podzespoły i zatwierdza wszystkie ogłoszenia. Następnie ogłoszenia zostają wgrane na odpowiednie serwisy]
  6. Przeszukiwanie towarów – użytkownik otwiera panel wyszukiwania, zostaje mu wyświetlona lista pierwszych kilkudziesięciu najnowszych pozycji na magazynie, wyszukuje m. in. Po polach: kategoria, podkategoria, marka, typ oraz innych, jeżeli odnajdzie poszukiwany towar, może kliknąć na niego dwa razy aby przeglądnąć szczegółowe informacje na jego temat. [Scenariusz użycia: Użytkownik postanawia znaleźć Silnik spalinowy Cummins v5, pasujący do marki Liebherr, z przebiegiem nie większym jak 5000 moto godzin. Wybiera kategorie silniki spalinowe, podkategorie Cummins, z rozwijanej listy marke Liebherr, w polu odpowiadającym motogodziną wpisuje <5000. Wyświetlona zostaje lista 3 silników pasujących do danego kryterium wyszukiwania, użytkownik klika na pierwszy na liście po czym klika na przycisk cofnij by zobaczyć inne silniki w tym samym wyszukiwaniu, klika na drugi z kolei po czym wyłącza okienko]
  7. Przeglądanie towarów – po wybraniu towaru zostają wyświetlone informacje o ogłoszeniach związanych z danym towarem. Użytkownik może zobaczyć takie dane jak ilość ogłoszeń ogółem, ilość ogłoszeń zamieszczonych w danym serwisie, ogłoszeń które wymagają jego uwagi. Pojawiaj się lista ogłoszeń z której można przejść do konkretnego ogłoszenia oraz opcja dodania nowego ogłoszenia do towaru.
  8. Przeglądanie ogłoszeń – użytkownik otwiera panel wyszukiwania ogłoszeń, gdzie zostaje mu wyświetlona lista kilkudziesięciu ostatnio zamieszczonych ogłoszeń. Może przeszukiwać ogłoszenia po takich polach jak Tytuł ogłoszenia, Kategorii i podkategorii w programie Integra, Dacie zamieszczenia w serwisie, serwisie w jakim zostało zamieszczone, ilość sztuk na magazynie towaru, osobie która go edytowała, numeru katalogowego, numeru identyfikacyjnego ogłoszenia.
  9. Zaaplikowanie predefiniowanego filtru przeglądania ogłoszeń i towarów– użytkownik może wybrać z listy filtrów filtr wypełniający pola wyszukiwania według podanych wcześniej parametrów [Scenariusz użycia: Użytkownik podczas przeglądania ogłoszeń chciał wyświetlić wszystkie ogłoszenia dla których liczba sztuk towarów na magazynie wynosi 0. W tym celu wybrał z listy filtrów : Puste stany magazynowe. Po wybraniu filtru pole związane ze stanem magazynowym zostało wypełnione i następnie lista wyświetlanych ogłoszeń została uzupełniona]
  10. Dodanie nowego filtru – użytkownik podał dane do wyszukiwania, następnie wybrał opcje zapisu jako nowy filtr, po podaniu nazwy dla filtru zostaje zapisany
  11. Edycja ogłoszenia – Użytkownik po wyborze ogłoszenia może zmienić jego tytuł, treść, kategorie, podkategorie, wyróżnienie w serwisie. Dodatkowo może zostać dodana notatka do ogłoszenia lub zaznaczony tag np. uwaga, nieaktualne. Po zatwierdzeniu zmian ogłoszenia zostają wgrane na wybrane serwisy. [Scenariusz użycia: Użytkownik znalazł podczas przeglądania zewnętrznego serwisu internetowego ogłoszenie które może być nieaktualne, przeszedł do panelu przeglądania ogłoszeń, w mejsce filtru dla identyfikatora ogłoszeń przepisał znaleziony identyfikator w serwisie. Na liście ogłoszeń pojawiło się jedno ogłoszenie. Po wybraniu go został wyświetlony panel edycji. Ogłoszenie zostało oznaczone jako nieaktywne, następnie po zatwierdzeniu zmian uaktualnione(skasowane) w serwisie]

Analiza hierarchii funkcji projektowanej aplikacji

Budowa i analiza diagramu przepływu danych

Data Context Diagram

DFD 0 Level

DFD 1

DFD 2

DFD3

Wybór encji (obiektów) i ich atrybutów.

Wybrane encje dla programu AdTamer:

  • Advertisments
  • AdvertismentsPhotos
  • Articles
  • Services
  • CategoriesTranslations
  • ServiceCategories
  • Tags
  • Users
  • UserTypes
  • UserTypesPrivilages
  • Privilages

Ponadto program AdTamer będzie pośrednio przez widoki łączył się z bazą danych programu Integra i wykorzystywał encje:

  • Towary
  • TowaryPojazdy
  • StanyTowarow
  • GrupyTowarow
  • PodgrupyTowarow

Wylisotowane encje bedą udostępnione w bazie danych jako ich okrojone widoki:

  • Towary → ArticlesIntegra
  • TowaryPojazdy → ArticlesMachinesIntegra
  • StanyTowarow → ArticlesQuantitiesIntegra
  • GrupyTowarow → ArticlesGroupsIntegra
  • PodgrupyTowarow → ArticlesSubgroupsIntegra

Projektowanie powiązań (relacji) pomiędzy encjami.

Projekt diagramów STD

Projektowanie tabel, kluczy, kluczy obcych, powiązań między tabelami, indeksów, etc. w oparciu o zdefiniowany diagram ERD

Z uwagi na wykorzystanie dwóch baz danych w których jedna jest odpowiedzialna za przechowywanie danych programu AdTamer (nazywaną AdTamerDB) a druga z kolei za ich dostarczanie z programu integra (nazywaną IntegraDB). Została podjęta decyzja by dane pobierane z bazy IntegraDB były udostępnione jako widoki dla bazy AdTamerDB. Głównym powodem dla którego została podjęta taka decyzja było by przy wykorzystaniu obiektowo-relacyjnego mapowania w docelowym programie było ono możliwie najprostsze. Minusem tej metody jest z kolei brak możliwości ustawienia kluczy pomiędzy widokami z bazy IntegraDB a tabelami z bazy AdTamerDB. Tego typu niejednoznaczność występuje w dwóch tabelach: Articles (pole id), ServiceCategories (pole idCategoryIntegra, idSubCategoryIntegra). Rozwiązaniem jeszcze nie zaimplementowanym w bazie było by dodanie trigerów, który sprawdzały by istnienie danego pola w odpowiednim widoku. Poniżej znajduje się diagram tabel dla bazy AdTamerDb.

Słowniki danych

  • Advertisments - przechowuje informacje dotyczące pojedynczego ogłoszenia przynależącego do artykułu i zamieszczonego w konkretnym serwisie
    • id - Large Unsigned Number, Req'd, PK, identyfikator główny reklamy
    • version - Large Signed Number, Req'd, PK, wersja danego ogłoszenia
    • idCategory - Large Signed Number, Req'd, FK, kategoria/podkategoria do jakiego przynależy dane ogłoszenie w serwisie
    • idEditedBy - Large Signed Number, Req'd, FK, przez kogo zostało edytowane do nowej wersji ogłoszenie
    • idArticle - Large Signed Number, Req'd, FK, do jakiego ogłoszenia odności się dane ogłoszenie
    • idTag - Large Signed Number, FK, dodatkowy znacznik, opis ogłoszenia
    • recentCheckOut - Small Time stamp (auto), Req'd, kiedy dany element był zapisany
    • removed - Small True/False, Req'd, opisuje czy dany element jest usunięty
    • comments - SBCS VarChar(max), Req'd, komentarze do danego ogłoszenia
    • title - SBCS VarChar(300), Req'd, tytuł ogłoszenia zamieszczany w zewnętrznym serwisie
    • description - SBCS Large VarChar, Req'd, opis ogłoszenia zamieszczany w zewnętrznym serwisie
  • AdvertismentsPhotos - łączy zdjęcia zapisane na serwerze ftp z ogłoszeniami
    • idAdvertisment - Large Signed Number, Req'd, PK, FK, id ogłoszenia do którego ma być powiązane zdjęcie
    • version - Large Signed Number, Req'd, PK, FK, wersja ogłoszenia do którego ma być powiązane zdjęcie
    • photoName - SBCS VarChar(300), Req'd, PK, nazwa zdjęcia na serwerze ftp
  • Articles - zawiera dodatkowe informacje, nie zamieszczone w bazie integra odnośnie towarów
    • id - Large Signed Number, Req'd, PK, klucz główny odnoszący się do pojedynczego artykułu w bazie integra
    • idTag - Large Signed Number, dodatkowy znacznik
    • recentCheckOut - Small Time stamp (auto), Req'd, data ostatniej modyfikacji
    • noticeable - Small True/False, Req'd, znacznik opisu czy dany artykuł powinien być brany pod uwage w bardziej zawansowanych wyszukiwaniach
    • comments - SBCS VarChar(max), dodatkowy komentarz odnoszący się do artykułu
  • ArticlesGroupsIntegra - zbiór kategorii występujących w programie Integra
    • id - Large Signed Number, Req'd, PK, klucz główny dla kategorii
    • active - Small True/False, Req'd, odpowiada za to czy dana kategoria jest aktywna(wyświetlana)
    • timestamp - Small Time stamp (auto), Req'd, czas modyfikacji
    • name - SBCS VarChar(45), Req'd, mazwa kategorii
  • ArticlesIntegra - Towary zamieszczone w bazie Integra
    • id - Large Signed Number, Req'd, PK, identyfikator główny towaru
    • idSubgroup - Large Signed Number, FK, pod kategoria do jakiej nalezy towar
    • idGroup - Large Signed Number, FK, kategoria do jakiej nalezy towar
    • active - Small True/False, odpowiada za to czy dany towar jest widoczny dla użytkownika(w programie równoważne z usunięciem)
    • timestamp - Small Time stamp(auto), czas ostatniej modyfikacji
    • catalogNumber - SBCS VarChar(100), numer katalogowy występujący na towarze
    • otherNumber - SBCS VarChar(100), dodatkowe oznakowanie
    • name - SBCS VarChar(128), pełna nazwa towaru
    • shortCut - SBCS VarChar(30), skrócona nazwa towaru
    • comments - SBCS VarChar(100), komentarze dodatkowe
    • frozen - Small True/False, odpowiada czy dany element może być modyfikowany
    • remind - Small True/False, dodatkowa informacja czy dany towar powinien być wyróżniony
    • comments2 - SBCS VarChar(100), dodatkowe komentarze
    • nameGroup - SBCS VarChar(45), nazwa kategorii do jakiej należy dany towar
    • nameSubgroup - SBCS VarChar(45), nazwa pod kategorii do jakiej należy dany towar
    • nameProducent - SBCS VarChar(50), nazwa producenta
    • descriptionShort - SBCS VarChar(300), krótki opis towaru
    • fullDecription - SBCS VarChar(1000), pełny opis towaru
    • photo - Small True/False, czy dany towar posiada zdjęcie
    • photoName - SBCS VarChar(100), poczatkowa nazwa zdjecia ( przechowywane sa na ftp photoName_number)
  • ArticlesMachinesIntegra - przypisanie informacji do której maszyny podchodzi * id - Large Signed Number, Req'd, PK, identyfikator główny
    • id - Large Signed Number, id maszyny
    • active - Small True/False,Req'd, czy dana maszyna powinna być pokazywana(równoznaczne z usunięciem jeżeli False)
    • timestamp - Large Time stamp(auto), czas ostatniej modyfikacji
    • idArticle - Large Signed Number, Req'd, towar który pasuje do danej maszyny
    • idMark - Large Signed Number, marka maszyny
    • idModel - Large Signed Number, model maszyny
    • idVersion - Large Signed Number, dodatkowe informacje o wersji
  • ArticlesQuantitiesIntegra - stany magazynowe
    • id - Large Signed Number, Req'd, PK, identyfikator danego stanu
    • idArticle - Large Signed Number, Req'd, Towar
    • idMagazine - Large Signed Number, magazyn na jakim znajduje się dana ilość
    • state - Large Floating point, stan magazynowy
    • priceGroupNetto - Large Floating point, cena za jednostke netto
    • priceGroupBrutto - Large Floating point, cena za jednostke brutto
  • ArticlesSubgroupsIntegra - pod kategorie występujące w programie integra
    • id - Large Signed Number, Req'd, identyfikator główny podkategorii
    • idSubgroupArticle - Large Signed Number, podległa pod grupa
    • active - Small True/False, Req'd, czy jest aktywna
    • timestamp - Small Time stamp (auto), Req'd, czas ostatniej modyfikacji
    • name - SBCS VarChar(45), nazwa danej podkategorii
  • CategoriesTranslations - tabela tłumacząca
    • id - Large Signed Number, Req'd, PK, identyfikator kategorii
    • idService - Large Signed Number, Req'd, PK, serwis do którego odnosi się dane tłumaczenie
    • idParentCategory - Large Signed Number, opcjonalna kategoria główna dla podkategorii
    • idCategoryIntegra - Large Signed Number, Req'd, FK, kategoria z bazy integra do ktorej odnosi sie tlumaczenie
    • idSubacategory - Large Signed Number, Req'd, FK, pod kategoria z bazy integra do ktorej odnosi sie tlumaczenie
  • Privilages - prawa dostępu występujące w systemie
    • id - Large Signed Number, Req'd, PK, identyfikator główny uprawnienia
    • name - SBCS VarChar(100), Req'd, wyświetlana nazwa uprawnienia
    • description - SBCS VarChar(100), Req'd, dodatkowy opis uprawnienia
  • ServiceCategories - kategorie występujące w zewnętrznych serwisach, odpowiada za stworzenie struktury drzewiastej kategori występujących w zewnętrznych serwisach
    • id - Large Singed Number, Req'd, PK, identyfikator główny
    • idService - Large Signed Number, Req'd, FK, serwis do ktorego odnosi sie dane połączenie
    • idParentCategory - Large Signed Number, kategoria nadrzędna w stosunku do obecnej
    • name - SBCS VarChar(100), Req'd, nazwa kategorii
  • Services - obsługiwane serwisy zewnętrzne
    • id - Large Signed Number, Req'd, PK, identyfikator główny serwisu
    • identyfier - SBCS VarChar(250), Req'd, specjalny klucz/odcisk biblioteki obsługujacej
    • login - SBCS Varchar(100), login wykorzystywany w serwisie
    • password - SBCS Varchar(250), hasło wykorzysytwane w serwisie
    • name - SBCS Varchar(25), nazwa danego serwisu
    • description - SBCS Varchar(300), opis serwisu
    • added - Datetime, Req'd, czas dodania serwisu
  • Tags - dodatkowe znaczniki opisu
    • id - Large Signed Number, Req'd, PK, identyfikator główny
    • name - SBCS Varchar(100), Req'd, nazwa danego tagu
    • color - SBCS Varchar(100), Req'd, kolor zestawiony z danym znacznikiem
    • priority - Large Signed Number, Req'd, priorytet danego tagu interpretowany na poziomie programu
    • type - Large Signed Number, typ zastosowania danego tagu
  • Users - uzytkownicy wystepujący w systemie
    • id - Large Signed Number, Req'd, PK, identyfikator główny uzytkownika
    • login - SBCS Varchar(50), Req'd, login użytkownika
    • password - SBCS Varchar(250), Req'd, zahaszowane hasło uzytkownika
    • idUserType - Large Signed Integer, FK, typ konta użytkownika
    • inactive - True/False Small, Req'd, czy dany użytkownik może korzystać z systemu(równoważne z usunięciem)
  • UserTypes - typy użytkowników występujących w systemie
    • id - Large Signed Number, Req'd, PK, identyfikator główny typu użytkownika
    • name - SBCS Varchar(100), Req'd, nazwa typu użytkownika
    • description - SBCS Varchar(200), Req'd, opis typu użytkownika
  • UserTypesPrivilages - łączy typ użytkownika z prawami dostepu
    • idUserType - Large Signed Number, Req'd, PK, FK, typ użytkownika do którego odnosi się relacja
    • idPrivilage - Large Signed Number, Req'd, PK, FK, typ uprawnienia do którego odnosi się relacja

Raport końcowy

Implementacja bazy danych

Z uwagi na wykorzystywany przez klienta program Integra system bazodanowy został odgórnie narzucony był to Microsoft SQL Server 2000. Z uwagi na łączenie informacji występujących w dwóch oddzielnych bazach danych (programu Integra i oddzielnej programu AdTamer) zostały wykorzystane widoki do mapowania potrzebnych danych z bazy Integra ponadto już podczas tworzenia oprogramowania mapowania do ORM - NHibernate było wykonywane ręcznie. Na serwerze www na którym zamieszczane są ogłoszenia zainstalowany jest MySQL 5.0.

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

Użytkownik podstawowy posiadający prawa do edytowania ogłoszeń może przeglądać ogłoszenia występujące w programie dzięki panelowi z opcją filtrowania po kliknięciu na przycisk - Towary - w głównym menu.

W tym panelu użytkownik może znaleźć interesujące go Towary które chce edytować.

Następny interfejs odpowiada za przeglądanie danych detalicznych oraz wyświetlanie zdjęć związanych z danym towarem.

Po lewo znajdują się już dodane ogłoszenia. Po kliknięciu na dane ogłoszenie zostaje otworzony panel edycji ogłoszeń.

Użytkownik może w tym miejscu edytować, usunąć i synchronizować ogłoszenie w serwisie.

Dodatkowo dla administratora systemu zostały dodane dodatkowe interfejsy związane z zarządzaniem kontami użytkowników oraz dostępnymi serwisami.

Powyższy interfejs został przygotowany pod kątem dodawania oraz usuwania użytkowników.

Każdy serwis może posiadać indywidualny system związany z kategoryzacją ogłoszeń. Aby uniknąć sytuacji gdzie użytkownik musi za każdym razem przechodzić przez proces wyboru kategorii został utworzony szablon automatycznej konwersji kategorii z programu Integra do wybranego serwisu.

Zdefiniowanie panelu sterowania aplikacji

Menu aplikacji opiera się na dualnym podziale - funkcjonalności związane z zarządzania reklamą oraz ustawienia. Jednym z celów programu było uproszczenie interfejsu. Wszystkie przyciski funkcjonalne znajdują się na danym formularzu bez globalnego panelu sterowania.

Zdefiniowanie makropoleceń dla realizacji typowych operacji

Do makropoleceń można zaliczyć synchronizacje z serwisem. Podczas synchronizacji z każdym serwisem są wykonywane następujące czynności.

  • Sprawdzanie pod kątem nie istniejących ogłoszeń w serwisie lub w bazie AdTamer - rozwiązanie konfliktów
  • Synchronizacja danych
  • Synchronizacja zdjęć
  • Zwrócenie danych podsumowywujących

Uruchamianie i testowanie aplikacji

Aplikacja do poprawnego działania potrzebuje specyficznego środowiska. Korzysta ona z bazy danych SQL Serwer 2000 - podczas testowania była ona umieszczona na wirtualnej maszynie. Z zewnętrznego serwisu internetowego - z uwagi na brak bezpośredniego dostępu do bazy - w sensie możliwości jej fizycznych zmian, jedynie zarządzanie danymi - testy były wykonywane bezpośrednio na działającym serwisie. Jako dodatkowe utrudnienie podczas testowania było udostępnianie bazy danych jedynie dla określonej puli adresów. Program pobiera zdjęcia z programu Integra poprzez wirtualny dysk, z kolei z strony internetowej poprzez serwer ftp. Po zestawieniu wszystkich potrzebnych wymagań systemowych program był testowany pod kątem wydajności oraz odporności na błędy. Błędy związane z błędami wykonania podczas normalnej pracy nie występują jednak w końcowej fazie projektu zapomniano o zabezpieczeniu przed błędami występującymi poza programem jak zerwanie połączenia, restart wirtualnego dysku co prowadziło do przerwania pracy i restartu programu.

Wprowadzanie danych

Wprowadzone dane należą częściowo do programu Integra. Stanowią one podstawę do tworzenia ogłoszeń. Podczas testowania zostały wprowadzone dodatkowe ogłoszenia, zdjęcia. Został dodany jeden serwis oraz związana z nim kategoryzacja.

Wdrażanie systemu do użytkowania

System został przedstawiony klientowi jednak nie jest jeszcze w fazie kiedy można go wprowadzić do firmy na pełną skalę. Na chwilę obecną znajduje się na pojedynczym stanowisku testowym.

Rozwijanie i modyfikowanie aplikacji

Aplikacja ma znaczny potencjał była ona tworzona pod kątem rozwoju i łatwego dodawania nowych serwisów. Z uwagi właśnie na te cechy początkowy czas poświęcony aplikacji nie jest do końca widoczny w obecnym stanie aplikacji. Aplikacja docelowo ma za zadanie udostępnić zunifikowany interfejs do obsługi wielu serwisów jednocześnie z możliwością łatwej modyfikacji konfiguracji używanych serwerów. Pierwszym celem rozwoju jest dokończenie podstawowego interfejsu użytkownika. Później stopniowe dodawanie kolejnych modułów obsługujących.

Opracowanie doświadczeń wynikających z realizacji projektu

Podczas tworzenia projektu większość wykorzystanych technologii była mi nieznana. Jest to moja pierwsza aplikacja wykorzystująca Windows Presentation Fundation, ORM - NHibernate, nakładka Fluent NHibernate. Podczas tworzenia aplikacji wykorzystywałem również nowy dla mnie wzorzec ModelViewViewModel. Niestety nauka bezpośrednio na projekcie wpłynęła negatywnie na jego jakość. W końcowej fazie tego projektu - gdy już dostatecznie poznałem nowe technologie - mogłem zauważyć znaczny wpływ na szybkość wykonania takich mechanizmów jak Bindowanie danych czy mechanizmu ORM. Dodatkowo wprowadzenie wzorca ModelViewViewModel usprawniło zarządzanie aplikacją poprzez sprowadzenie całej logiki do jednej warstwy ułatwiając przy tym ich ponowne wykorzystanie. Głównym problemem jaki miałem podczas tworzenia aplikacji było pobieranie danych asynchronicznie przy wykorzystaniu NHibernate. Podstawowy mechanizm sesji nie wspomaga wielowątkowości co prowadziło do licznych błędów wykonania. Podczas pracy nad projektem został zdefiniowany interfejs do zrównoleglania wątków odpowiedzialnych za pobieranie danych dla Nhibernate. Jednak w przyszłości przy tworzeniu aplikacji dużo lepszym podejście było by wykorzystanie pojedynczego wątku odpowiedzialnego za całość komunikacji.

2011/05/07 21:31
pl/dydaktyka/ztb/2011/projekty/adtamer.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