Wpis z mikrobloga

#programowanie #csharp #xamarin

Piszę aplikację mobilną w Xamarinie.

Mam klasę NoteService która pobiera dane z serwera REST. Tzn. jest funkcja GetNote(id) która zwraca notatkę przechowywaną na serwerze.
Wszystko jest OK, dopóki token którego używam do autoryzacji się nie zdezaktualizuje. Jeśli jest nieaktualny, wypadałoby przekierować użytkownika do strony logowania.

Przekierowywać do innej strony (Page) mogę tylko z klas które dziedziczą po klasie Page lub pochodnych. Moja klasa NotesService nie ma nic wspólnego z architekturą Xamarina, pobiera po prostu dane z serwera. W jaki sposób powinienem przekierować użytkownika do strony logowania?

Kod:
http://pastebin.com/ziTBT5uW
  • 5
@dminta: @brzooz: Szczerze mówiąc nie bardzo rozumiem jak mogłoby mi to pomóc. Moim celem było uniknięcie przekazywania do konstruktora klasy (odpowiedzialnej za pobieranie notatek) obiektów które są powiązane ze środowiskiem (czyli tej klasy NavigationService która służy do poruszania się po Page'ach).

Co prawda działa, natomiast mam po prostu wątpliwość czy jest to poprawne pod względem jakości kodu. Już pomijam fakt, że kod jest nieużywalny na innych platformach (bo jewt uzależniony
@Wunderwafel: Może z tej metodzy zwracaj jakiś obiekt klasy coś w rodzaju:

Status: Enum (Ok, NotAuthorized, UnknownError),
Data: Twoje dane

I sprawdzaj Status już w klasie, która dziedziczy po Page.

Mniej eleganckie wyjście to rzucenie jakimś wyjątkiem i jego obsługa w odpowiednim miejscu.
@Wunderwafel: Serwis nawigacyjny (...NavigationService) posiada kontrakt w postaci interfejsu (INavigationService). W kontenerze IoC rejestrujesz jego konkretną implementacje (AndroidNavigationService, WPNavigationService...), która jest przekazywana do konstruktora serwisu pobierającego dane. Implementacja może być dowolna, bo nie interesuje nas co się dzieje w środku i nie polegamy na jej konkretnej realizacji. Wiadomo że każda platforma mobilna realizuje nawigację na swój własny sposób, dlatego ustalenie uniwersalnego kontraktu może być wyzwaniem.
Taka praktyka jest powszechna w różnych