Daily Archives: 2007.01.30. 6:39

Tényleg olyan egyszerű az AJAX?

Aki foglalkozott már az ASP.NET 2.0 AJAX kiterjesztésével, biztosan észrevette, hogy a tervezők kiemelt figyelmet fordítottak arra, hogy meglévő ASP.NET 2.0 alkalmazások egyszerűen kiegészíthetők legyenek az új funkcionalitással. Mindennek a lelke az új UpdatePanel kontroll, melybe beágyazva a meglévő adatkezelő kontrolljainkat, egy csapásra AJAXosíthatjuk az oldalunkat.

Valóban csak ennyiről van szó, ebből áll az ajaxosítás?

Közelítsük meg más oldalról a kérdést: ugyanúgy kell ezután is megterveznünk a webalkalmazásainkat, az oldalainkat és a funkcionalitást? Ugyanúgy kell ezután is használniuk a felhasználóinknak az alkalmazásainkat, ugyanarra a felhasználói tudásra van szükségük ahhoz, hogy eligazodjanak a webhelyünkön?

Szerintem nem! Csak néhány érdekesség a lehetséges problémák közül:

  • Kereső motorok: mivel egy AJAXos oldal nem teljes egészében frissül, ezért a részleges újratöltés után is változatlan marad az URL. Mit szólnak ehhez a keresőmotorok, mit kezd mindezzel a Google? És mit kezd majd az oldallal a felhasználó, amikor a Google-ben rákattint a találatra és mégsem lesz az oldalon a keresett szó?
  • Linkek: hogyan fogunk tudni hivatkozni egy olyan oldalra, vagy pontosabban egy oldalnak egy olyan állapotára, amely 4-5 részleges frissítés után alakult ki?
  • Forgalomszámlálás: mi számít ezek után egy megtekintett oldalanak? A menü és a hirdetések nem töltődnek újra, csak az oldal közepén a lényeg, de az sokszor. Akkor most ez hány page impression?
  • Böngésző gombok: hogyan értelmezzük ezek után a böngésző Back és Forward gombjait? Sőt, egyértelmű lesz egy átlagfelhasználó számára, hogy mi, fejlesztők, hogyan értelmezzük őket?
  • Használhatóság: hogyan lehet egyértelműen jelezni a felhasználók számára, hogy mi történik? Értik egyáltalán mindezt a felhasználók? Eddig az internet böngészés 1×1-e az volt, hogy rákattintunk egy aláhúzott szóra, majd nézzük a böngésző státuszsorát és várjuk, hogy az oldal töltődését jelző csík elérje a 100%-ot. És most mit tanítunk majd, mire kell figyelni? Léteznek-e egyáltalán usability és accessibility ajánlások AJAXos weblapokhoz?
  • Dizájn: honnan tudja majd egy webtervező, hogy milyen oldalt kell terveznie, ajaxosat, vagy olyat, ami hagyományos mosóport használ? És miután ez kiderül, tudni fogja egy dizájner, hogy miben más a felhasználó viselkedése, hogy ki kell tenni egy homokórát vagy egy figyelmeztető üzenetet valahova az oldalra?

Az AJAXos webalkalmazások tehát gyökeresen mások, mint a régi kérés-válasz protokollra épülő webek. Meg lehet nézni az MSN Soapbox-ot: egyetlen oldalon belül egyszerre lehet keresni, videót nézni és navigálni. Tehát nem csak arról van szó, hogy JavaScriptet, XmlHttp-t és DHTML-t építünk az alkalmazásunkba, hanem arról is, hogy felborítjuk az eddigi (mindegy, hogy jó vagy nem jó, de jól megszokott) rendet!

Persze lehet mindezt pusztán technikai szemmel, objektumok, osztályok és webszolgáltatások szintjén nézni, de azért nem árt, ha pontosan látjuk, milyen problémákat veszünk a vállunkra. Mint mindig, ezekről a hátulütőkről is lesz szó a következő MSDN Kompetenciák Egyeteme rendezvényen, amin a február 8-9-én az ASP.NET AJAX-szal foglalkozunk! De addig is, ha van véleményed, ragadj billentyűzetet!

Technorati tags: ,
Advertisements

Saját események WF activity-ben (kiegészítés)

Az előző hasonló című szösszenetből kimaradt egy dolog, így most ezzel a bejegyzéssel igyekszem leróni adósságomat: hogyan lehet elsütni egy olyan eseményt, ami saját EventArgs osztályt használ?

Az Activity osztálynak van egy RaiseEvent() metódusa, a legtöbb példában ezt találjuk. Ennél lényegesen szebb megoldás, ha a RaiseGenericEvent<T>() metódust használjuk:

protected internal void RaiseGenericEvent<T> (
  DependencyProperty dependencyEvent,
  Object sender,
  T e
) where T : EventArgs

Persze az MSDN (pardon, a Windows SDK, mert a .NET 3.0 dokumentációja persze külön van) nem sokat segít:

Type Parameters
T
The specified type.

Értsd: a T paraméterben kell megadni a saját EventArgs osztályból származtatott típus nevét, valahogy így:

protected override ActivityExecutionStatus Execute( ActivityExecutionContext aec )
{
  // …
  base.RaiseGenericEvent<WorkEventArgs>( MyActivity.OnWorkingEvent, this, new WorkArgs( … ) );
  // …
}

Na így már talán teljes a kép 🙂

Technorati tags: , ,