Łatwiejsza praca z bazą danych Azure Mobile Services

Ostatnio zacząłem bawić się z Windows Azure Mobile Services, ponieważ chciałem zobaczyć czy, to rozwiązanie będzie wystarczające do aplikacji, którą teraz piszę. Nie spodobał mi się jednak sposób jaki ekipa Microsoftu sugeruje wyciąganie danych w aplikacji, czyli przechowywanie uchwytu do bazy Mobile Service jako statycznej właściwości w klasie App. Wiele przyjemniejszym rozwiązaniem jest stworzenie sobie klasy Repozytorium, która będzie pośrednikiem między aplikacją a serwisem wyciągającym dane. Najprostsze repozytorium może wyglądać tak:

public class ServiceRepository<T>
{

    public static MobileServiceClient MobileService = new MobileServiceClient(
        "https://linktoservice.azure-mobile.net/",
        "SECRETPASSWORD");

    public async Task<T> Add(T obj)
    {
        await MobileService.GetTable<T>().InsertAsync(obj);
        return obj;
    }

    public async Task Delete(T obj)
    {
        await MobileService.GetTable<T>().DeleteAsync(obj);
    }

    public async Task<T> Update(T obj)
    {
        await MobileService.GetTable<T>().UpdateAsync(obj);
        return obj;
    }

    public IMobileServiceTable<T> Get()
    {
        return MobileService.GetTable<T>();
    }
}

Ponieważ każdy element w bazie WAMS posiada swoje Id, możemy trochę rozszerzyć działanie repozytorium wprowadzając interfejs IServiceModel, po którym będą dziedziczyć wszystkie inne modele.

interface IServiceModel
{
    int Id { get; set; }
}

Dzięki temu, możemy dodać do repozytorium jeszcze jedną bardzo przydatną metodę:

public class ServiceRepository<T>
    where T : IServiceModel
{

    //...

    public async Task Get(int id)
    {
        var obj = await MobileService.GetTable()
            .Where(e => e.Id == id)
            .Take(1)
            .ToListAsync();

        if (obj != null && obj.Any())
            return obj.First();

        throw new InvalidIdException();
    }
}

Stworzenie takiej klasy daje nam dużo bardziej czytelny kod i pozwala nam zmniejszyć liczbę zmian w systemie, jeśli w przyszłości okazałoby się, że jednak nie będziemy korzystać z WAMS, a czegoś innego.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *