Smart Client (Romanian)

Lucrând la partea de client a produsului nostru DlhSoft Portal, am ajuns la concluzia că cea mai bună abordare ar fi de a realiza un "Smart Client" în locul unui client rigid, care te face să aştepţi până când apelurile la baza de date (sau la Web Service-ul de pe server) se realizează.

Zis şi făcut. Acum avem un motor de tip "Smart Client" pentru aplicaţie, care realizează următoarele:

  1. Caching de date (sub forma unor fişiere în Isolated Storage), aşa încât la iniţializare utilizatorul primeşte imediat date pe ecran fără să aştepte realizarea Get-urilor efective de la baza de date (prin Web Service acestea durează destul de mult); bineînţeles, la prima rulare, datele trebuie aduse, dar şi aceasta se face în background, iar dacă deja utilizatorul vede data de care are nevoie, poate efectua clic pe aceasta şi vedea informaţii suplimentare relaţionate cu ea sau chiar să o modifice chiar dacă restul datelor nu au ajuns; această proprietate se realizează de fapt pe bază de threading;
  2. Sincronizare în background cu baza de date (threading), atât pentru operaţiile de Get (după cum am descris şi mai sus), cât şi pentru cele de Update: atunci când utilizatorul modifică o informaţie, aceasta este imediat reflectată în interfaţă, dar apelul la baza de date este adăugat într-o coadă de execuţie, care se execută într-un alt thread, în background, mai târziu;
  3. Posibilitate de a se lucra offline (coada de execuţie se păstrează până când se restabileşte conexiunea la Internet); pentru moment, dacă se părăseşte produsul în mod offline, rămâne un thread care aşteaptă restabilirea conexiunii pentru a executa coada rămasă, dar intenţionăm să persistăm coada în Isolated Storage şi să fie sincronizată la următoarea rulare.

Problema care se pune însă este referitoare la punctul nr. 2 şi poate fi enunţată în modul următor:

Cum ar trebui prezentate eventualele mesaje de eroare returnate de către Web Service la rularea efectivă a elementelor din coada de execuţie?

Există mai multe posibilităţi şi aş dori, dacă se poate, să îmi transmiteţi şi voi care credeţi că e cea mai bună cale (poate fi una diferită dintre cele de mai jos, pe care eu poate nu am sesizat-o):

  • Un MessageBox afişează mesajul de eroare; nu este recomandabil deoarece coada de execuţie se poate executa mai târziu şi utilizatorul vede eroarea după ceva timp după ce a realizat operaţia în interfaţa utilizator (acolo părea reuşită) şi mesajul de eroare raportat de o operaţie trecută ar putea să-i provoace confuzie;
  • Mesajul să fie afişat în Status bar-ul aplicaţiei; în acest caz cât timp să fie afişat? ce se întâmplă dacă apare rapid o a doua eroare? şi cât timp să fie afişat pe Status bar mesajul? ce să se întâmple la click pe status bar?
  • A treia opţiune pare cea mai interesantă (deşi e un pic mai greu de pus în practică): ar trebui să existe în interfaţă opţiunea View Status care să afişeze, mesajele de eroare ale execuţiilor recente (sau a tuturor execuţiilor, de la pornirea aplicaţiei). Bineînţeles, un icon (sau un text) pe Status bar (sau altundeva în interfaţă – unde?) ar putea informa utilizatorul când există mesaje de eroare noi (nevăzute deocamdată de utilizator în View Status); clicul pe acest icon ar deschide imediat fereastra View Status. Acest tip de abordare este cel realizat de Microsoft în clientul lor MSN Premium. Ce credeţi, merită să ne strofocăm şi să programăm funcţionalitate de logging de erori şi View Status sau e OK una dintre primele două opţiuni?

Vă mulţumesc anticipat pentru feedback, orice părere contează. Dacă aveţi alte idei în legătură cu cele de mai sus, nu ezitaţi să mi le transmiteţi, vor fi binevenite toate. Mulţumesc încă odată.

About Sorin Dolha

My passion is software development, but I also like physics.
This entry was posted in Computere și Internet. Bookmark the permalink.

Add a reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s