2011-04-30 29 views
8

Czy podczas pisania aplikacji do pracy w trybie offline i online najlepiej napisać ją raz, aby pracować w trybie offline, a tryb online będzie działać tak samo, jak offline?Pisanie aplikacji do pracy w trybie offline (aplikacja internetowa)

Na przykład zobaczymy, że mamy typowy przykład koszyka na zakupy. Koszyk zawiera przedmioty i klienta.

Po załadowaniu koszyka na zakupy, czy należy przechowywać w pamięci podręcznej wszystkie elementy + klientów w pamięci lokalnej i używać tej pamięci podręcznej danych zarówno w trybie online, jak i offline i aktualizować pamięć podręczną w razie potrzeby? Jakie są najlepsze praktyki podczas opracowywania hybrydowej aplikacji sieciowej offline/online?

Odpowiedz

7

Pisanie aplikacji internetowej do pracy w trybie online/offline jest bardzo podobne do pisania "normalnej" aplikacji internetowej sterowanej przez serwer, z wyjątkiem tego, że masz warstwę dostępu do danych (DAL) aplikacja i dane żywe na serwerze (tryb on-line) lub dane przeglądarki (tryb offline).

W zależności od aplikacji i potrzeb można uruchomić jeden z dwóch trybów: a.) Tryb pamięci podręcznej i try-twój-najlepszy lub b.) Load-everything-and-check-for- tryb aktualizacji.

Każdy z tych dwóch trybów ma kilka dobrych i złych części i na pewno można mieć różne części aplikacji, które są tak czy inaczej szczupłe.

Cache-and-try-your-najlepszy tryb

W tym trybie dane buforuje DAL z serwera do magazynów danych twojej, gdyż dostęp do danych w czasie jego normalnej eksploatacji. Po przejściu do trybu offline DAL stara się spełnić żądania użytkowników, ale ma tylko dane z pamięci podręcznej do pracy, więc niektóre operacje mogą nie zostać ukończone (a przynajmniej nie od razu). Z drugiej strony, minimalny czas rozpoczęcia oczekiwania na załadowanie danych jest minimalny, ale z drugiej strony każde działanie wymaga trafienia serwera (jeśli jest podłączony) i dane muszą być buforowane. Aplikacja musi również z wdziękiem za każdą operację, której nie może ukończyć z powodu niekompletnych danych.

Load-wszystko-i-check-for-updates trybie

W tym przypadku, obciążenia DAL wszystkich danych aplikacja potrzebuje do przeglądarki podczas uruchamiania aplikacji. Jeśli aplikacja została już załadowana, wszystkie dane muszą zostać zaktualizowane, aby upewnić się, że pamięć podręczna nie jest nieaktualna. W gruncie rzeczy użytkownik nie musi długo czekać na rzeczy, ponieważ wszystko jest operacją lokalną, ale z drugiej strony, jeśli jest dużo danych, czas uruchomienia może być raczej długi.

W obu przypadkach musisz storpedować nieaktualne problemy z pamięcią podręczną i problemy z utrzymaniem operacji off-line na serwerze. Oznacza to, że przy uruchamianiu, a także prawdopodobnie okresowo podczas działania aplikacji, będziesz musiał zsynchronizować się z powrotem z serwerem, aby zachować świeże dane w pamięci podręcznej i udostępnić dowolny lokalny stan, który możesz mieć z serwerem, reszta świata widzi aktualizacje z tej instancji aplikacji.

Trwające operacje na serwerze, które wystąpiły w czasie, gdy aplikacja była w trybie offline, mogą być szczególnie trudne, gdy dane związane z tą operacją zmieniają się między aktualizacjami aplikacji. Na przykład, jeśli saldo banku buforowanego jest nieaktualne i oznacza o wiele więcej pieniędzy niż stan "prawdziwy" odzwierciedlony przez serwer, użytkownik może przesłać konto, nie wiedząc o tym. Jest to skrajny przykład, ale tego rodzaju operacyjne wykrywanie kolizji musi istnieć w celu obsługi aktualizacji, które mogą napotkać na siebie.

Ogólnie rzecz biorąc, jeśli masz aplikację, która może być zarówno w trybie online, jak i offline, napisz aplikację, aby sama aplikacja nie wymagała opieki. Warstwa danych niższego poziomu usuwa wszystkie problemy, a Twoja aplikacja musi tylko wiedzieć, jak radzić sobie z brakiem możliwości uzyskania potrzebnych informacji (co powinna zrobić każda dobra aplikacja w trybie online lub offline).

W przypadku koszyka na zakupy najprawdopodobniej (lub, mam nadzieję,?), Będzie DOWOLO więcej produktów niż jakikolwiek indywidualny klient prawdopodobnie włoży do koszyka. Załadowanie ich wszystkich do przeglądarki każdego użytkownika prawie na pewno jest OGROMNYM marnowaniem przepustowości i spowodowałoby takie opóźnienie dla użytkowników, że ogromny koszt łącza i utracona sprzedaż (z powodu wolnego czasu reakcji) szybko utracą każdą firmę. Załaduj produkty do danych przeglądarki w razie potrzeby, a jeśli chcesz, możesz załadować inne produkty, które "inni użytkownicy kupili", które są powiązane z przedmiotami znajdującymi się w koszyku.

Powiązane problemy