A tervezés szerepe a webfejlesztésben
Sziasztok!
Kezdő vagyok (oly régóta már :), ezért nézzétek el, ha lámaságokat (ráadásul sokat) beszélek.
Kitaláltam magamnak egy elég összetettnek tűnő webportált (CakePHP-t használok hozzá), gondoltam egy teljes projekt építéséből lehet a legtöbbet tanulni. Jelenleg 57 adatbázis táblánál tartok, talán ez az adat elég jól jelzi az alkalmazás bonyolultágát. Persze sokan a tapasztaltabbak közül most azt mondják: "Ez semmiség, rutinmunka..", de én már kezdem elveszíteni a fonalat és a kérdésem éppen ezzel a "fonallal" kapcsolatos. Nem tudom, más hogy van vele, de a neten fellelhető tutorialok rövid példái, vagy egy 5-10 táblát használó alkalmazás még vígan átlátható a számomra, ezen tapasztalatok nyomán felbátorodva és nagyobb tervek megvalósításába belevágva azonban egyszerűen elveszítem a kontrollt.
Szóval hogyan lehet egy nagyobb (felhasználókezelés, cikkek szerkesztése (mint a Wikipédiában), többnyelvű felület és tartalom (a nyelvek száma nem kötött), stb..) alkalmazást átláthatóvá tenni, egyáltalán szokás-e valamilyen tervezési módszert alkalmazni összetettebb weboldalak készítése közben? A CakePHP manual például nagyjából azzal indít, hogy "készítsük el az adatbázist, aztán majd megy minden mint a karikacsapás..". Az én esetemben már ez az első lépés is több hónapja tart és gyakran egy röpke új ötlet miatt újra kell tervezni az egészet. Fizetős munka esetén ez biztosan megengedhetetlen, úgyhogy felmerül a tervezés (és a tervhez való ragaszkodás?) szükségessége, de webes fejlesztésekkel kapcsolatban ilyesmiről nemigen olvastam még (az adatbázistervezés fontosságáról persze már igen).
Talán jobb, ha pontokba szedem a kérdéseket:
- Használnak-e a webfejlesztésben (az ER modell mellett) UML-t, vagy hasonló tervezési metódust?
- A gyakorlatban is, vagy csak elméletben?
- Mikortól válik egy projekt "többemberessé"?
- Hogyan tehető egy projekt bővíthetővé, folyamatosan fejlesztehtővé?
Remélem nem kérdezek botorságokat, köszönöm a válaszokat.
■ Kezdő vagyok (oly régóta már :), ezért nézzétek el, ha lámaságokat (ráadásul sokat) beszélek.
Kitaláltam magamnak egy elég összetettnek tűnő webportált (CakePHP-t használok hozzá), gondoltam egy teljes projekt építéséből lehet a legtöbbet tanulni. Jelenleg 57 adatbázis táblánál tartok, talán ez az adat elég jól jelzi az alkalmazás bonyolultágát. Persze sokan a tapasztaltabbak közül most azt mondják: "Ez semmiség, rutinmunka..", de én már kezdem elveszíteni a fonalat és a kérdésem éppen ezzel a "fonallal" kapcsolatos. Nem tudom, más hogy van vele, de a neten fellelhető tutorialok rövid példái, vagy egy 5-10 táblát használó alkalmazás még vígan átlátható a számomra, ezen tapasztalatok nyomán felbátorodva és nagyobb tervek megvalósításába belevágva azonban egyszerűen elveszítem a kontrollt.
Szóval hogyan lehet egy nagyobb (felhasználókezelés, cikkek szerkesztése (mint a Wikipédiában), többnyelvű felület és tartalom (a nyelvek száma nem kötött), stb..) alkalmazást átláthatóvá tenni, egyáltalán szokás-e valamilyen tervezési módszert alkalmazni összetettebb weboldalak készítése közben? A CakePHP manual például nagyjából azzal indít, hogy "készítsük el az adatbázist, aztán majd megy minden mint a karikacsapás..". Az én esetemben már ez az első lépés is több hónapja tart és gyakran egy röpke új ötlet miatt újra kell tervezni az egészet. Fizetős munka esetén ez biztosan megengedhetetlen, úgyhogy felmerül a tervezés (és a tervhez való ragaszkodás?) szükségessége, de webes fejlesztésekkel kapcsolatban ilyesmiről nemigen olvastam még (az adatbázistervezés fontosságáról persze már igen).
Talán jobb, ha pontokba szedem a kérdéseket:
- Használnak-e a webfejlesztésben (az ER modell mellett) UML-t, vagy hasonló tervezési metódust?
- A gyakorlatban is, vagy csak elméletben?
- Mikortól válik egy projekt "többemberessé"?
- Hogyan tehető egy projekt bővíthetővé, folyamatosan fejlesztehtővé?
Remélem nem kérdezek botorságokat, köszönöm a válaszokat.
Igen
Igen. Mi például használunk.
Teljes mértékben gyakorlatban, az adatbázis tábláihou egy sor SQL-t nem írunk kézzel, mindig UML-ből generáljuk illetve az osztályaink vázát is UML-ből állítjuk elő.
A nagyságától. Egy ember lehet kvázi-többemberes, amikor nekiül a dizájner, utána nekiül a szájtbilder, stb. és lehet ténylegesen több emberes, amikor több fejlesztő dolgozik ugyanazon a programon egyszerre.
Ez egy összetett kérdés, mert több féle képpen is lehet érteni. Ha arra gondolsz, hogy hogy tud több ember együtt dolgozni, arra viszonylag egyszerű a megoldás, valamilyen verziókövetést kell használ, be kell vezetni kódolási szabványokat, kötelező eljárásokat (pl nightly build, stable tag, stb) és azokat ellenőrizni kell.
Ha magára a programkódra gondolsz, az egy bonyolultabb feladat. Meg kell csinálni a megfelelő absztrakciós mechanizmusokat, szét kell választani minél jobban az alkalmazáslogikát a megjelenéstől és magától a keretrendszertől (ez utóbbi dolog még nagyon sok helyen hiányzik, nagyon sok helyen közvetlenül a keretrendszer részét képezi az alkalmazáslogika).
Ez persze elég elméleti és van egy rossz hírem is. A tervezés tapasztalatom szerint legtöbbször nem a fejlesztésnél hibádzik mert elég könnyű felismerni a tervezési igényeket mert utána Te szívod meg ha nem terveztél. Ergo, két-három projekt és tudod mit akarsz. A sokkal rosszabb a dologban az, hogy valahogy a dizájnereket is rá kell venni arra hogy tartsák magukat a specifikációhoz vagy egyáltalán elolvassák. Mivel nem ők fogják utána megszívni ha nem jót alkottak, ezért nehéz őket rászorítani arra hogy figyeljenek.
Egyébként jó téma, jó kérdés. Köszi. :) (Légyszi kapcsold be az üzenetküldést vagy keress meg magánban.)
Kicsit rossz volt a kérdés
Ezt kifejthetnéd bővebben? Én valami olyasmit értek ki belőle, hogy a keretrendszer határozza meg a tervet és nem fordítva és szerinted ez rossz. Ha a CakePHP-t nézzük, mint keretrendszert, akkor ugye abban az MVC minta érvényesül, amiről néha azt érzem, hogy teher, illetve túlzottan megköt. Persze az a valószínű, hogy egyszerűen nem ismerem eléggé a CakePHP-t. És el is jutottunk a másik kérdéshez. Feltételezve egy Igazán Profi Fejlesztőcsapat-ot (továbbiakban IProFecs), az ideális módszer az, hogy az IProFecs megismerve a feladatspecifikációt kiválasztja az ideális keretrendszert és programozási nyelvet, összegyűjti a megoldáshoz az elérhető kódkönyvtárakat, előkapja a szerszámosládából a megfelelő tervezési mintákat és "percek alatt" összeüti a kész alkalmazást, majd az egészet leönti az egyedi kinézet mázával. Mindehhez persze az szükséges, hogy az IProFecs folyamatosan képben legyen az elérhető eszközökkel kapcsolatban az adatbázisszerverektől a programozási és jelölő nyelveken keresztül a grafikán át a keretrendszerekig. Talán nem csak nekem tűnik úgy, hogy ez szinte lehetetlen. Marad tehát az, hogy az IProFecs kiválaszt magának EGY keretrendszert, EGY-KÉT adatbázisszervert stb., vagy bizonyos típusú feladatokra specializálódik, amihez esetleg saját keretrendszert készít. Egy-két emberes cégek számára az utóbbi tűnik járhatónak. Szóval érdemes egyáltalán keretrendszert használni? Vagy a feladattól függően újakat kell mindig megtanulni? Vagy ismerni kell az összeset? Vagy mindez együtt?
(Üzenetküldést bekapcsoltam (azt hiszem).)
Fejlesztés módszere
Egy jó ideje figyelem ezt a témakört, mivel nagyon érdekel. Ha elmész egy átlag webfejlesztőnek nevezett céghez, ott úgy működik, hogy a projekvezető (rosszabb esetben a főnök) leül az ügyféllel, megbeszélik hogy mit akar, grafikus leül, megcsinálja a tervet, elküldi az ügyfélnek, az rábólint, majd ki lesz adva a programozónak hogy csinálja meg. Na ez nem módszer, ez hülyeség, remélhetőleg nem kell kifejtenem, miért.
Egy kicsit jobb cégnél a programozó egyezteti le a funkcionális részét.
Egy igazán profi cégnél (webfejlesztés terén ilyenhez nem volt még szerencsém) a tervező megtervezi, specifikálja a működést és ez alapján kezd el mind a programozó mind a grafikus dolgozni. (MVC a munkamódszerben.)
-
Ami a szétválasztást illeti, azért hangsúlyoztam, hogy a keretrendszer elemeit is szét kell választani, mert ne tudd meg hányszor láttam már olyat, hogy php->smarty és döngött a mellkas hogy milyen jól szét van választva. Aztán amikor egy lekérdezést meg kellett kicsit változtatni, nekiült a tag és a keretrendszerbe belehegesztette a fícsört PHPban. Namost ez a kód újrahasznosítását kicsit odavágja.
A másik amit még gyűlölök, azok a behegesztett URI-k egy-egy modulhoz, amit nem lehet csak mindenféle hekkeléssel, aliasokkal, stb. kiküszöbölni.
Az ilyesmit konfigurálni kell tudni! Méghozzá sok keresgélés nélkül! Lehet hogy eleinte megköti a kezed de módosítási kéréseknél szidni fogod önmagad (vagy az elődöd) ha nem történik meg.
UML
Milyen progival generáljátok az sql-t és a php-t (ha php-t használtok)?
bizi
EA
Köszi
SQL tervezőket találtam én is, de a php lett volna fontosabb. Kb. 2 éve keresgéltem, de akkor nem találtam működőt vagy megfizethetőt.
bizi
Open source?
Kicsik, kevesek
ArgoUML
Visual Paradigm szintén elég jó, a fizetős verziója tud php-t is generálni, van adatbázis tervező modulja, elég klassz cucc.
... :S
Használta valaki ezeket gyakorlatban (nem csak adatbázis tervezésre, hanem pl szekvencia diagrammra, követelmény-elemzésre, stb.)? Elég sokáig kerestünk megfelelő eszközt de a bonyolultabb funkciók terén pangás van...
Umbrello és Dia
Egyébként van jelentősége az UML verziónak? Azt olvastam valahol, hogy az UML eszközkészletének 20 %-ával modellezhető a valós helyzetek 80 %-a. Persze, ha céges előírások vannak az UML verzióval kapcsolatban, akkor biztos van, de a webszerkesztő társadalom "félvad" szegmesében mi a gyakorlat? Mert például Proclub a magasabb szintű funkciókat hiányolja az ingyenes eszközökkel kapcsolatban, ugyanakkor úgy tűnik, ezzel a kívánsággal kisebbségben van, mintha a webfejlesztők többsége nem is használna UML-t (vagy más tervezési módszert). Rosszul látom?
uml használat
ezzel asszem eléggé leszűkítettük a gyakorlati uml-használatot (olyanokat figyelembe se véve, hogy például egy valós és nem ideális fejlesztés esetén általában rohanás van, általában "nincs idő" uml-ezésre. persze ha az ember szakít rá, az általában később megtérül, de ez az idealizált eset), így valóban: tapasztalataim szerint webes projektek esetén elég kevés esetben használják az uml-t.
Doksi
Sajnos a tervezési módszerek tekintetében a webfejlesztés eléggé "barbár" környék, még aki adatbázis tervezésre UML-t használ is, máshol meg dolgokat gyógyít össze amik nem összevalók.
Sajnos mivel a web nagyobbrészt a dizájnerek oldaláról kap ügyfeleket, a fejlesztési rész háttérben zajlik és mivel elég egyedi, a szoftvertervezési sémákat nem lehet ráhúzni és nincs kialakult módszertan. Ez most kezd (talán) kialakulni, de nagyon nehéz keresztül vinni, hogy legalább az alapvető dolgokat tartsák be (főleg a grafikus részlegen).
Amit talán a módszeresség hiányánál is jobban utálok a web terén az az állandó futószalag munka. A "hackerek" filozófiája szerint egy feladatot egyszer kelljen elvégezni. Ahhoz képest minen nap azonos problémák előtt állunk és magára a fejlődésre "nincs idő".
programtervezési minták
szerintem ez így, ilyen formában nem teljesen igaz. várható, hogy egy kisebb oldalnál valóban nincs rá szükség, de egy nagy bonyolultságú oldalnál, neadjisten egy keretrendszernél vagy cms-nél igenis az alap (GoF féle) programozási minták jelentős része használható (persze nem kell belezsúfolni, csak hogy ott legyen, olyat is láttam már). abban viszont teljességgel egyetértek, hogy nem szokás használni, nincs még elterjedve és hogy kialakulóban van. ami viszont olyan szempontból jó, hogy nem gyöpösödött be a szakma, és vannak külön dierkt webre, vagy hasonló környezetre vonatkozó minták is (hellyel-közzel idevágóan: lásd sun féle J2EE minták), nem csak a régieket használják.
Minták...
A sarkallatos pont: Ami az ügyféligényeket illeti, elsősorban (a hagyományos programokkal ellentétben nem a funkcionalitás felől közelítik meg a dolgot, hanem a reprezentatív oldalról, tehát jobban hasonlít a követelmény egy reklámra mint egy szoftverre.
minták létjogosultsága
néhány minta, amik szerintem használhatóak: mvc (ez ugye most már alap :)), abstract factory, builder, factory method, singleton, adapter, bridge, decorator, facade, lightweight, strategy, esetleg commant és iterator. most így hirtelen ezek jutottak eszembe, bár láttam már felelőségláncot is, igaz az erős túlzás volt, de kissé sántítva rá lehetett húzni. és ezzel az alap minták jó részét felsoroltam. persze az is hozzátartozik, hogy mint minden absztrakció, ezek is lassíthatnak, ami egy másodpercenként több száz-ezer kérést kiszolgáló oldalnál gondot okozhat (persze lehet cachelni), mindenesetre szerintem igenis van létjogosultságuk webes téren is.
(a j2ee minták kapcsán meg érdemes itt nézelődni: ( http://java.sun.com/blueprints/corej2eepatterns/Patterns/index.html és http://www.corej2eepatterns.com/Patterns2ndEd/index.htm ) van néhány ötlet
Optimista vagy. :)
mvc
iterator
Javascriptben meg mondjuk objectekből xml vagy querystring meg ilyesmikhez visitort(vagy ahhoz hasonlót) is szoktam.
Tanulságos :)
Lehet, hogy hülyeség amit írok, de talán az AJAX lehet egy olyasféle megoldás, ami elmozdítaná a webet az "állapotosság" (nem tudom, hogy fogalmazzam meg, az állapot nélküliség ellentéte) irányába. Ha a hangsúly a kliens irányába tolódik el, és a szerver oldali szkriptnyelvre "csupán" az adatbázis felé irányuló kapcsolat megteremtése marad (így valósítva meg a javascriptből hiányzó, az adatok perzisztenssé tételének képességét), akkor talán kiterjedtebben lehetne alkalmazni az asztali alkalmazásoknál bevált tervezési mintákat. Tömörebben fogalmazva a javascript nyelven írt alkalmazás a böngészőben fut, az adattárolást pedig (és csak azt) a távoli adatbázis végzi, hasonlóan egy asztali alkalmazáshoz, mely a helyi merevlemezt használja például adatok fájlba írására. Ekkor az egész alkalmazáslogika egy helyen van, a szerver csak adatot tárol (és megoszt).
UI.: Oppá elkéstem..
Sarokpontok
Jól látod, hogy ez lehetne egy fajta view az MVC-ben, de csak alkalmazásoknál. Oldalak kiszolgálásánál nem, mert gátolja az indexelést. Mivel a weboldalak többsége (mint a weblabor is) nem steril oldal vagy steril alkalmazás, valahogy megpróbáljuk mindig belőni a középmezőnyt. Ha a kompatibilitás a cél, akkor diszkrét JavaScriptet kell használni, ami általánosan szintén megoldatlan probléma.
Meg aztán ott van ugye a biztonság kérdése is...
Mint látod, van itt mit fejleszteni, csak lenne rá ideje az embernek. Az biztos, hogy aki megoldja ezt a problémát (amire az AJAX csak egy kerülő válasz) és el is tudja adni, az sikeres ember lesz. :)
Biztonság
js
php
comet
Terhelés...
gmail?
Optimalizálás
de azért meglehet
én próbálkozom
aham
hogyan máshogy?
szerintem
memória
update: oké, unix alapú rendszerekkel hívhatsz valami shellfilet, de ezzel is csak php-ből van megoldva a dolog
hmm
ne dőlj be ;)
Ha nagyon akarod, akkor bármikor megteheted, hogy írsz egy MySQL függvényt, amivel tudsz shared memory-t kezelni, ez valaszeg nem túl bonyolult, de konkrét tapasztalatom nincs e téren (bár egyszer már írtam egy MySQL függvényt). Ezt utána PHP-ból tudod kezelni. Szintén tudsz mondjuk ugyanígy Memcache-be írni, annak elég egyszerű protokolja van. És ha valaki otthon van jobban rendszer programozásban, szerintem még biztosan lehetnek egyéb megoldások is.
Pl. olyat is el tudok képzelni, hogy MySQL Proxyn megy keresztül a query, és az kezeli le transzparensen a cache kezelését.
Megteheted azt is, hogy fut egy deamon szerűséged, ami figyeli a DB-t folyamatsan, és ő írja mondjuk Memcache-be a szükséges adatokat, és az oldalt kiszolgáló PHP-k ezt rángatják.
Ezenkívül nem vagyok benne biztos, hogy feltétlenül leromlik a DB teljesítménye több felhasználónál is, valószínűleg a Query Cache ebben az esetben jó szolgálatot tehet. Bár még ha onnan is jön az adat, biztosan többe kerül kiszolgálni, mintha Memcache-ből jönne.
Üdv,
Felhő
Huh
Ez most így egyszerre kicsit sok volt, de ígérem mindegyik megoldásnak utánajárok előbb, vagy utóbb. Még van mit tanulnom programozás terén, és fogok is :-) Php terén meg főleg van mit :-) Most éppen infokat gyűjtök, hogy milyen technológiákat lehet használni, és melyeket érdemes is, és azt hiszem ez a sokminden, amit leírtál elég hasznos lesz nekem, szal kösz mégegyszer.
Üdv. Jánszky László
Umbrello
Modszertan
Ha valamifele modszertant keresel, akkor szemely szerint ajanlanam az XP-t. A tapasztalat azt mutatja, hogy a mindennapi munka soran rengeteg elvet hasznalnak fel a fejlesztok az XP-bol. Nem azert, mert XP-t hasznalnak, hanem a gyakorlatiassag kivanja. A modszertan nem azt mondja meg, hogy milyen lepeseket tegy, hogy egy tokeletes adatmodelled legyen (ez nem egy matematikai egyenlet), hanem azt, hogy a projekt ne Brown-mozgas legyen, hanem valami olyan ize, amirol latszik, hogy honnan hova jut.
Módszertan?
Szerintem fontos a nyitottság és az alapvető informatikai tudás is. Tudni kell például szoftvert fejleszteni...
Ha a módszertan nem ad választ arra a kérdésre, hogy hogyan kell szoftvert fejleszteni (mert feltételezi, hogy ez a tudás már megvan), akkor nem módszertant keresek, hanem választ erre a kérdésre, mármint arra, hogy hogyan kell szoftvert fejleszteni. A tapasztalat viszont azt mutatja, hogy előbb-utóbb beleütközünk a tervezés szükségességébe. Valószínű, hogy az átlagos megrendelő nem fog olyan feladatot kitűzni, ami ne lenne megoldható a már meglévő keretrendszerekkel (vagyis a munka nagy része rutinmunkának tűnik), de a karbantarthatóság és fejleszthetőség miatt mégis szükséges lehet átlátni a dolgokat. Hogyan zajlik ez a gyakorlatban? Egy csapat egy keretrendszert használ (akár a sajátját), vagy folyton újakat tanul (ha igen, akkor ezt az adott feladat függvényében teszi, vagy a konkrét feladatoktól függetlenül igyekszik minden vonalon naprakész lenni)?
UML vagy keretrendszer?
UML
A keretrendszer egy olyan dolog... én világéletemben a magam útját jártam és nem bántam meg.
Hm...
Tervezés
Tévedsz. Webes keretrendszerekről van szó ugyebár, azért ezt ne feledjük. A webnek meg van egy bizonyos kontextusa, egy többé-kevésbé kötött feladatrepertoárja, ergó egy platform. A webes keretrendszerek, mint a Cake, az ezzel a platformmal való ismétlődő munkáidat egyszerűsíti le (DRY), illetve emeli olyan absztrakt szintre, ahol ez minimalizálódik. Tehát azt a területet fedi le, amit le kell neki, valószínűleg jobban, mint ahogy te tennéd (a kollektív tudás miatt). Azaz nem a tervezés terhét veszi le; hanem annak egy bizonyos részét.
Az az érvelés, hogy egy webes keretrendszer túl korlátozó, éppen ezért általában nem helytálló, mert az rejlik mögötte, hogy az illető nem méri fel rendesen a szerepét és a mozgásterét egy ilyen keretrendszerrel való együttműködésben.
A keretrendszerben való gondolkodás egyébként azért is egészséges, mert ez a két aspektus – általános és specifikus, vagy másképp: platformspecifikus és projektspecifikus feladatok – elválasztódik a tervezésben és megvalósításban is.
Igaz, de...
A keretrendszerek "korlátaival" kapcsolatos nyűglődéseim oka az AJAX környékén tűnik kikristályosodni. A keretrendszerek ugye szétválasztják az adatot (Model), a működést (Controller) és a megjelenítést (View). Utóbbi azonban az AJAX révén (mely adott esetben meglehetősen bonyolult is lehet) ismét felbontható, hiszen már nem pusztán megjelenés, formázás, hanem egyben működés is (közvetlenül eléri az adatot, a Modelt), vagyis úgy tűnik, mintha a működés (vezérlés) egy része "átfolyna" a kliensre és a tervező elbizonytalanodik. Mit tartson meg szerver oldalon a Controllerben és mit érdemes a kliensoldali Javascripre bízni? Vagy ez már ízlés dolga?
Controller marad
ajax
Ennélfogva a modellel a kliensoldal nem is tud kommunikálni. Ez az adminműveletek optikai csalódása lehet; de ha belegondolsz, minden adminművelet klasszikus navigációval is megoldható, csak kényelmetlenebbül; ezért jó az ajax, mert kényelmes.
Egy elegáns ajax-alkalmazás egy MVC-rendszerben olyan, hogy mind a modell, mind a controller kódja változatlan.
Egyébként az MVC rendszerek ha valamiben, az ajaxozásban aztán bika erősek, a helpereikkel főleg. (Van egy olyan érzésem, hogy nagy részben az ajax terjedésével nőtt meg rájuk a kereslet.)
json