A fejezetben megismerkedünk a webes alkalmazások tervezésének alapjaival és eszközeivel. A fejezetben egy konkrét alkalmazás tervezésén keresztül mutatjuk be az egyes lépéseket.
A fejezetet elsajátítva képesnek kell lenni arra, hogy kis vagy közepes méretű alkalmazás tervezését saját magunk elvégezzük.
A tananyagban a példákat egyetlen példaalkalmazás keretein belül szándékozzuk bemutatni. A példaalkalmazás lehetőséget ad arra, hogy ne csak a technikai problémákat mutassunk be és oldjunk meg apróbb példákon keresztül, hanem azzal is szembesüljünk, hogy egy nagyobb alkalmazás készítésekor ezek az apróbb részletek hogyan állnak egésszé, és milyen további kihívásokat rejtenek magukba. Látni fogjuk, hogy egy nagy egész több mint részeinek összessége. Ebből a célból egy megfelelően nagy, de mégis átlátható méretű példaalkalmazás készítését tűztük ki célul, mely lehetőséget ad mind a kisebb feladatok megoldására, mind pedig a nagy egésszé kovácsolás bemutatására.
A tananyagban célunk egy olyan webes alkalmazás készítése, mely lehetővé teszi fényképbemutatók készítését, megtekintését és publikálását.
A fenti szöveg azonban nagyon sok kérdést vet fel:
Ezekre a kérdésekre (és még talán egyéb felvetődött kérdésekre) mind válaszolnunk kell AZELŐTT, hogy a konkrét fejlesztésekbe belekezdenénk. Részletes tervezéssel sok későbbi felesleges munkát kiküszöbölhetünk. Ugyanakkor ne áltassuk magunkat: fejlesztés közben vagy akár az alkalmazás (főleg webes alkalmazás) használata közben sok olyan igény felmerülhet, amely az eredeti koncepciónkat megváltoztathatja, felboríthatja.
Nézzük végig módszeresen az egyes tervezési szempontokat:
Ebben a fázisban a fejlesztő felméri, összegyűjti a megrendelő funkcionális és nem funkcionális igényeit, elvárásait, ez alapján meghatározza, vagy közösen meghatározzák az elvárandó funkciókat, definiálják a marketing- és stratégiai célokat.
A további tervezési lépések az összegyűjtött követelményekre épülnek, azok kifejtéseinek, fejlesztési szempontból részletezéseinek tekinthetőek.
A követelmények összegyűjtésének célja az alábbiak, meghatározása, figyelembe véve a rendelkezésre álló erőforrásokat.
Példánkban felmértük az alkalmazással szemben támasztott követelményeket, ezeket felsorolás-szerű leírásban írjuk le:
Azaz a nyújtandó szolgáltatások ismertetése, esetleg rövid leírása.
A jellemzően nem funkcionális követelményeket, azaz megszorítások a szolgáltatásokra (funkciók) érdemes kategorizálni.
Legalább az alábbi kategóriák szerint:
Természetesen megadhatunk egyéb kategóriákat is, például:
Alkalmazásunkkal szemben támasztott nem funkcionális igények lehetnek például az alábbiak:
Jelen jegyzetben nem foglalkozunk a stratégiai követelményekkel, célokkal, de itt kellene felsorolni az erre vonatkozó elvárásainkat is, melyek meghatározzák a marketing eszköztárat, valamint az alkalmazás üzleti modelljét.
Ebben a részben egyrészt arról kell döntenünk, hogy milyen jogosultsági csoportokat szeretnénk kialakítani. Másrészt meg kell adnunk, hogy az egyes jogosultsági csoportok milyen funkciókat érnek el, majd meghatározhatjuk a folyamatok pontos menetét, azaz az egyes funkciók végrehajtásának lépéseit.
A jogosultsági csoportokat szerepköröknek hívjuk, a felhasználókat pedig legalább egy szerepkörhöz rendeljük. Az alkalmazásunkban a fenti igények alapján háromféle szerepkör körvonalazódik ki:
Az azonosításon kívül még arra is figyelnünk kell, hogy a bejelentkezett felhasználók milyen tartalmakhoz férhetnek hozzá. Ezt a lépés autorizációnak hívjuk, és a példaalkalmazásban kimerül annyiban, hogy minden bejelentkezett felhasználó csak a saját bemutatóit szerkesztheti, másét nem.
A felhasználókhoz hozzárendelhetjük az egyes funkcionális követelményekhez, szkenáriókhoz, azaz a használati esetekhez. Táblázatos formában érdemes összefoglalni az egyes szerepkörök tulajdonságait:
Szerepkör neve: | RegisztráltUser |
Leírás: | Regisztrált felhasználó. Az alkalmazás teljes funkcionalitása csak ebbe a csoportba tartozó felhasználók számára érhető el. |
Profil adatok: | oid, userName, password, email |
Super-group: | User |
Sub-group: | Nincs |
Kapcsolódó use-case: | Login, Bemutató megtekintés, Keresés, Bemutató információk lekérése, Új bemutató, Kép feltöltés, Bemutató szerkesztése, Kép törlése, Bemutató törlése, Kedvencnek jelöl |
Objektumok – olvasási joggal | Bemutato, Kep |
Objektumok – módosítási joggal | Bemutato, Kep |
Ezt követően a követelmények alapján össze kell szedni a használati eseteket, szcenáriókat, forgatókönyveket, melyeket az áttekinthetőség kedvéért szokás ún. használati eset (use case) diagramon ábrázolni:
Az egyes használati esetek részletes folyamatait is le kell írni, erre is több lehetőség van. Jelen példánkban az UML Activity Diagramot (egyéb ajánlott leírási formátum lehet például az ún. Business Process Modeling Notation) és a táblázatos formát használjuk.
Példa: Új bemutató készítése:
Cím | Új bemutató készítése |
Cél | Új bemutató album készítése. |
Előfeltétel | Csak regisztrált felhasználó (RegisztráltUser) tud új bemutatót készíteni. |
Utófeltétel | A bemutató mentése sikeres. |
Folyamat leírása | Az alábbi lépések végrehajtása szükséges: Az alábbi adatokat kell a felhasználónak kötelezően megadnia egy új bemutató készítésekor: cím, leírás, szerzo (automatikus). Opcionális adatok: nincs Bemutató mentése |
Az alkalmazás általános leírását ebben a részben váltjuk aprópénzre. Meghatározzuk, hogy az alkalmazás nagyjából milyen oldalakból áll, és ezeken körülbelül milyen adattartalom jelenik meg és milyen funkciókat képzelünk el. Ezek természetesen később finomodhatnak és változhatnak.
Az alkalmazás nyitóképernyője, általában ez fogadja a látogatókat. Alapvető szerepe, hogy bemutassa, miről szól ez az alkalmazás, mit várhat tőle a felhasználó. A szöveges információn túl ízelítőt kell adnia a működésről, valamint a legjobb vagy legaktuálisabb, magyarán szólva a legcsalogatóbb tartalmakat is meg kell jelenítenie. Ezek mellett lehetőséget kell adnia a tartalmak különböző szempontú keresésére, böngészésére, valamint a bejelentkezésre, regisztrálásra. Ennek megfelelően a következő funkciók, elemek jelennek meg az oldalon:
Az alkalmazás központi, kulcsfontosságú része, hiszen az oldal fényképbemutatókat hirdet. Ennek megfelelően kellően attraktívnak és könnyen használhatónak kell lennie. Csak publikus bemutató jeleníthető meg!
Bejelentkezett felhasználó érheti csak el a saját bemutatóit.
Csak bejelentkezett felhasználó érheti el.
Csak bejelentkezett felhasználó érheti el, csak saját bemutatót.
Csak bejelentkezett felhasználó érheti el, csak saját bemutatót.
Csak bejelentkezett felhasználó, csak saját bemutatót. Eldöntendő, hogy törlés vagy inaktívvá tétel legyen?
Az oldalak funkcióinak összeírásával párhuzamosan elkezdhetjük az egyes oldalak körülbelüli elrendezéseit megrajzolni. E két feladat nagyon gyakran hatással van egymásra. Az összeírt adattartalom és funkcionalitás ugyanis sokszor meghatározza az elrendezést, és fordítva, az oldalvázlatok rajzolása közben új funkciók kerülhetnek az alkalmazásba.
Az oldalak elrendezésének előzetes tervezését drótvázkészítésnek hívják, az eredménye pedig az oldal drótváz rajza, vagy másképp angolul mockup-nak is hívják. A tervezést általában papíron végezzük el. Természetesen vannak a tervezés ezen fázisát segítő szoftverek is, az ún. mockup editorok vagy drótvázkészítő eszközök (wireframing tools). Ezek működése nagyon hasonlít a prezentációkészítő alkalmazásokra (pl. Powerpoint). Általában sok, speciálisan a webes alkalmazásoknál előforduló komponensekkel rendelkeznek, amelyeket az oldalon elhelyezve készíthetjük el a vázlatot. Sokszor ezen komponensek megjelenése szándékosan hasonlít a ceruzarajzra. Ennek az a célja, hogy hangsúlyozza a készítő vagy a megrendelő felé: a mockup nem a végleges design, hanem az oldal körülbelüli elrendezését tartalmazza, amely azonban már figyelembe veszi a megjelenő tartalmat és funkciókat. A mockup lesz majd az alapja a designnak.
Sokféle Mockup szerkesztő található, sok ingyenes is nagyon jól használható:
Az oldalfunkciókat figyelembe véve az alábbi oldalakhoz érdemes elkészíteni a drótváz rajzokat:
Főoldal
Bemutató
Saját bemutatók listája
Bemutató szerkesztése
Kép adatainak szerkesztése
Bár az oldalak és funkciók összeírásakor már jelezzük az oldalak kapcsolatait, az oldaltérkép kifejezetten azt a célt szolgálja, hogy az egyes oldalak egymáshoz viszonyított kapcsolatait bemutassa. A site struktúra ábrázolásakor nem az a lényeges, hogy az egyes oldalakon milyen tartalom jelenik meg, hanem az, hogy az alkalmazásunk oldalaira és kapcsolataira madártávlatból tekintsünk. A példaalkalmazás oldaltérképéből jól kiviláglik a publikus és a bejelentkezéshez kötött oldalak kapcsolatrendszere.
A fejlesztés viszonylag korai szakaszában szükséges az adatok tárolásához szükséges struktúrát megtervezni. Példaalkalmazásunk relációs adatmodellbe szánt normalizált terve a következő:
Név | felhasznalo |
Szinonimák | Felhasználó, user |
Leírás | A felhasználó adatai ebben a táblában kerülnek tárolásra. |
Attribútumok |
|
Kapcsolatok |
Név | bemutato |
Szinonimák | Bemutató, album, fényképalbum, |
Leírás | A felhasználók által készített bemutatók adatai ebben a táblában kerülnek tárolásra. |
Attribútumok |
|
Kapcsolatok |
|
Név | címke |
Szinonimák | Címke, tags, |
Leírás | A rögzített címkék listája található ebben a táblában. |
Attribútumok |
|
Kapcsolatok |
Név | bemutato_cimke |
Szinonimák | Bemutató-címke, |
Leírás | Az egyes bemutatókhoz hozzákapcsolt címkék |
Attribútumok |
|
Kapcsolatok |
|
Név | kedvenc |
Szinonimák | Kedvencek, favorits |
Leírás | A felhasználó által kedvenceknek jelölt albumok. |
Attribútumok |
|
Kapcsolatok |
|
Név | kep |
Szinonimák | kép, képek, fotók, photo |
Leírás | Az egyes albumokban szereplő képeket tartalmazó tábla |
Attribútumok |
|
Kapcsolatok |
|
Bár az oldalak összeírásánál megjelentek az adattartalommal kapcsolatos követelmények is, a fejlesztést nagy mértékben elősegítheti, ha összeírjuk, melyik oldalon milyen jellegű adatokat várunk. Ez előrevetítheti azt, hogy hányféle adatbázis lekérdezés szükséges egy oldal megjelenítéséhez, körülhatárolhatja az egyes lekérdezések adattartalmát (pl. egy összekapcsolt lekérdezés, vagy két külön lekérdezés legyen), pontosíthatja egyes mezők vagy területek adatforrását, stb. A tervezésnek ebben a szakaszában készíthetjük elő a megfelelő lekérdezéseket, nézeteket, tárolt eljárásokat.
Gyakran ezt a feladatot az egyes oldalak fejlesztése előtt végezzük el. Kisebb alkalmazásoknál ez működik is, nagyobb alkalmazásoknál azonban nehezebben ismerhetők fel különböző oldalakon ismétlődő adatigények, lekérdezési minták.
Példaalkalmazásunkban a következőképpen néz ez ki pár oldal esetén:
select b.*, f.azonosito, count(k.bemutato_id) as kedvencek_szama from bemutato b left join kedvenc k on b.id = k.bemutato_id inner join felhasznalo f on b.felhasznalo_id = f.id where b.publikus = 1 group by b.id order by b.letrehozas_datuma desc limit 10
select b.*, f.azonosito, count(k.bemutato_id) as kedvencek_szama from bemutato b left join kedvenc k on b.id = k.bemutato_id inner join felhasznalo f on b.felhasznalo_id = f.id where b.publikus = 1 group by b.id order by kedvencek_szama desc limit 10
select c.id, c.cimke, count(bc.cimke_id) as db from bemutato_cimke bc, cimke c, bemutato b where bc.cimke_id = c.id and bc.bemutato_id = b.id and b.publikus = true group by bc.cimke_id
A drótvázrajzok alapján elkészíthetjük az oldal designtervét. Ebben mindent definiálunk, ami az oldal megjelenéséhez szükséges: háttérképeket, elrendezéseket, színeket, stb. A designterv egy kép, amely általában megfelelő képszerkesztő program segítségével áll elő (Photoshop vagy GIMP). A folyamat ezen szakaszában történik az egyeztetés a megrendelővel, akinek ezen a ponton van lehetősége a kinézeti elemekhez javaslatokat tenni.
A kép alapján készülnek el az oldalsablonok, amik nem mások, mint a designterv alapján készült statikus oldalvázak. Ezek már definiálják az oldalaink HTML kereteit, kijelölve azokat a részeket ahova a dinamikus tartalom kerülhet, a megjelenésről pedig külön állományban elhelyezett stíluslap gondoskodik, amely ugyancsak fel van készítve arra, hogy az alkalmazásban előforduló különböző elemek (űrlapelemek, hibaüzenetek, oldalpanelek, stb) megjelenítését kezelje.
Példaalkalmazásunkban az alábbi oldalak designtervét készítettük el:
Főoldal
A többi oldaltól eltérő kinézetű és elrendezésű oldal, ezért külön szükséges a definiálása
Címkelista
Hozzá hasonló lesz a felhasználói lista, valamint a bejelentkezési és regisztrációs felületek, így elég csak ezt megrajzolni.
Bemutató
Megint csak egy egyedi oldal, az alkalmazás legfontosabb felülete
Bejelentkezett felhasználó bemutatólistája
A bejelentkezett felhasználónál kicsit másabb az oldal elrendezése a bal menü miatt.
Bemutató szerkesztése
A szerkesztéseknél megint csak egy egyedi oldal.
Kép szerkesztése
Hozzá hasonló lesz a bemutató szerkesztése, új kép feltöltése
A designtervek alapján az alábbi statikus oldalak készültek el (ld. a mellékelt állományt, mindegyik oldal a dyss.css és a keplista.css stíluslapok valamelyikét használja):
Az elkészült statikus oldalsablonokban érdemes a dinamikus tartalomnak megfelelő részeket HTML megjegyzésekkel jelölni. A saját bemutatók listájában például az alábbi képen jelzett régió lesz dinamikusan töltve, amelyet a következőképpen jelezhetünk az oldal HTML kódjában:
<!DOCTYPE html> <html> ... <body> ... <div id="content"> ... <div id="main_content"> <div id="inner_content"> <h2>Bemutatók listája</h2> <ul class="lista"> <!-- Dinamikus tartalom kezdete: bemutatólista --> <li> <div class="fo"> <a href=""> <img src="indexkep.png" /><br /> </a> <div class="info"> <h4>Példa bemutató</h4> <p class="kisbetu">Példa bemutató leírásaaaa</p> <p class="kisbetu"> Megtekintések: 49<br /> Kedvencek: 1<br /> Publikus<br /> </p> <p class="cimkek kisbetu">Címkék: </p> <ul class="cimkek kisbetu"> <li><a href="címke1">címke1</a></li> <li><a href="címke2">címke2</a></li> </ul> </div> </div> <div class="funkciok"> <ul> <li><a href="">Megtekint</a></li> <li><a href="">Szerkeszt</a></li> <li><a href="">Töröl</a></li> </ul> </div> </li> <!-- Dinamikus tartalom vege: bemutatólista --> </ul> <div class="separator"></div> </div> </div> <div class="separator"></div> </div> <footer>© Horváth Győző, Eötvös Loránd Tudományegyetem, Informatika Kar</footer> </body> </html>