Miesięczne archiwum: Wrzesień 2017

EF Core 2.0 w Xamarin Forms - Szybki start

EF Core 2.0 w Xamarin Forms – Szybki start

Programiści Xamarin często wykorzystują w swoich projektach lokalne bazy danych. Tutaj z pomocą przychodzą nam frameworki O/RM takie jak Entity Framework Core.

Entity Framework Core jest cross platformową wersją popularnego framework O/RM ze świata Microsoft. Za jego pomocą możemy w prosty sposób tworzyć warstwę dostępu do danych. Udostępnia on również wiele bardziej zaawansowanych funkcjonalności.

Niestety wersja 1.0 oferowała nam niewiele ale teraz od paru tygodni mamy nową jeszcze ciepłą wersję 2.0.

.NET Standard 2.0

Żeby zacząć swoją pracę z EF Core 2.0 musimy na początek stworzyć projekt .Net Standard 2.0 jest to wymagana zależność dla EF Core.

Nie będę się tutaj zagłębiał w niuanse związane z migracją do .NET Standard 2.0 ponieważ już zostało na ten temat dużo powiedziane np. tutaj Snack Pack 15: Upgrading to Xamarin.Forms to .NET Standard.

Szybki start

Żeby zacząć z EF Core należy na początek zainstalować pakiet NuGet Microsoft.EntityFrameworkCore.Sqlite 2.0.0.

Pakiet należy dodać do wszystkich naszych projektów.

Model

Nasza aplikacja będzie obsługiwała Sesję gry w której może być kilku graczy i właśnie takie informacje będziemy chcieli przechować w naszej bazie danych.

    public class Session
    {
		public int Id { get; set; }
		public DateTime Date { get; set; }
        public string TrackName { get; set; }
        public List<Player> Players { get; set; }
    }

    public class Player
    {        
        public int Id { get; set; }
        public int SessionID { get; set; }
		public string Name { get; set; }
        public string Time { get; set; }
    }

DbContext

Kolejnym naszym krokiem jest stworzenie DbContext. Jest to element centralny EF Core pełniący rolę repozytorium i obsługujący sesję z bazą danych.

    public class RankingsDbContext : DbContext
    {
        public DbSet<Session> Sessions { get; set; }
        public DbSet<Player> Players { get; set; }

        public RankingsDbContext()
        {
            Database.EnsureCreated();
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            var dbPath = DependencyService.Get<IFileHelper>().GetLocalPath("rankingsDb.db3");
            optionsBuilder.UseSqlite($"Filename={dbPath}");
        }
    }

Co dalej

Mamy już stworzone nasze modele, oraz DbContext. Teraz należy wykonać jakieś zapytanie na bazie danych.

W tym celu robimy zapytanie i gotowe.

                context.Sessions.Add(newSession);
                context.Players.AddRange(newSession.Players);

Podsumowanie

Jak widzicie użycie EF Core w aplikacjach Xamarin.Forms stało się teraz proste i przyjemne. W następnych postach przyjrzymy się kolejnym nowością, oraz ich zastosowaniom w aplikacjach mobilnych.

Apache Cordova i moje odczucia

Apache Cordova i moje odczucia

Niniejszy post jest tylko moją opinią i w żaden sposób nie podziela opinii mojej firmy.
 
Tak się złożyło, że przez ostatnie 2 miesiące zajmowałem się tworzeniem aplikacji hybrydowej z wykorzystaniem Apache Cordova oraz jQuery Mobile.
 
Dzisiaj chciałbym się z wami podzielić moimi odczuciami na temat tego framework, oraz pracy z nim w realnym projekcie. A więc zaczynajmy…
 

Background

Na początek chciałbym wprowadzić pewien kontekst w jakim będę chciał ocenić wywyższy framework.
 
Moim zadaniem było stworzenie aplikacji mobilnej na potrzeby jednego eventu z możliwością wyświetlenia video na żywo. Aplikacja powinna również posiadać lokalną bazę danych żeby dane nie musiały być ściągane za każdym razem z serwera.
 
Wybór padł na użycie:

  • Apache Cordova
  • jQuery Mobile
  • HTML5 local storage (lub jak inaczej się to ładnie nazywa)
  • MJPEG

 
Pomysł prosty i powiedzmy sprawdzony w boju przez wiele firm bądź nie…
 

Apache Cordova

Apache Cordova jest frameworkiem open-source do tworzenia aplikacji mobilnych z użyciem HTML, CSS i JavaScript. Technicznie nie jest to nic innego jak kontener opakowujący WebView i uruchamiający stronę web w natywnej przeglądarce dla danej platformy.

Kontener ten stanowi pewnego rodzaju wrapper pomiędzy natywnym API danej platformy, a aplikacją napisaną w HTML. Daje to nam możliwość w miarę łatwego dostępu do API urządzania. W moim przypadku był to Android i iOS.
 
Dlaczego Apache Cordova? I czemu aplikacja hybrydowa?
 
Padło na stworzenie aplikacji hybrydowej z jednej przyczyny no może trzech. HTML, CSS i JavaScript, oraz łatwość znalezienia programistów znających te technologie.
 
Bardzo łatwo jest stworzyć prostą aplikację klasy Todo app niestety problemy zaczynają się pojawiać w sytuacji gdy chcemy zacząć robić coś więcej. Tutaj z pomocą czasami mogą przyjść nam pluginy.
 

Cordova Plugins

Dają one dostęp do dodatkowych funkcjonalność jak np. logowanie za pomocą sieci społecznościowych lub dostęp do natywnych powiadomień.
 
Koncepcja fajna niestety posiadająca wiele niedociągnięć.
 
Bardzo często pluginy są rozwijane przez pojedynczych programistów w ich wolnym czasie co w efekcie sprawia, że są one różnej jakości. Nie twierdzę, że jest to coś złego niestety zmusza do przeszukiwania StackOverflow lub GithHub Issues w poszukiwaniu rozwiązań.
 
Wiele pluginów wymaga do działania różnych „niebezpiecznych” uprawnień na różnych platformach np. dostęp do dysku.
 

jQuery Mobile

Kolejny komponent który może ułatwić pracę ponieważ sama Cordova niewiele potrafi.
 
Niestety nie ma róży bez kolców i jQM od wielu miesięcy nie jest chyba rozwijane . Najnowsza wersji 1.5 jest od paru ładnych miesięcy wersją alpha.
 
Szczęście w nieszczęściu nawet działa i nie sprawia za wiele problemów. No może za wyjątkiem ciągłej walki ze stylami CSS.
 
To był chyba najtrudniejszy etap projektu, czyli zmiana wyglądu aplikacji.
 

Podsumowania słów kilka

Jak widzicie moje odczucia raczej można powiedzieć są negatywne. Może to wynikać z mojej ogólnej niechęci do JavaScript :).
 
Są one jednak poparte pracą nad realnymi problemami w realnym projekcie. Dlatego na chwilę obecną raczej bym się nie zdecydował na użycie Cordova w następnym projekcie.
 
Pytanie pozostaje czy np.. Xamarin Forms byłby lepszy?
 
Wiadomo każdy framework ma swoje plusy i minusy jak również wszystko zależy od konkretnego przypadku.
 
W moim przypadku może lepszym byłoby użycie np.. Firebase niestety w założeniach mieliśmy również minimalizację usług third party :).

Rider nowe IDE od JetBrains – pierwsze wrażenia

A więc dzisiaj miałem swoją pierwszą styczność z IDE innym niż Visual Studio.

Rider nowe IDE od JetBrains

Rider – pierwsze wrażenia

Samo IDE wygląda trochę jak połączenie Visual Studio i Eclipse :), czyli na plus można się w nim odnaleźć.

Niestety w wielu miejscach jest nieczytelne do tej pory nie udało mi się znaleźć informacji czy biblioteka, którą stworzyłem jest typu portable czy też nie?

Problematyczne jest również stworzenie biblioteki PCL lub zmiany Target Framework dla .Net Standard. Out-of-the-box ustawia się .netstandard1.4

Chociaż również mnie zaskoczyło pozytywnie wsparciem out-of-box dla c# 7.0.
Kolejne zaskoczenie Power Save Mode, czyli wyłączenie wszystkich rzeczy które chodzą w tyle dla oszczędzania baterii.

Jeżeli chodzi o Xamarin Forms to można stworzyć projekt\solution ręcznie niestety nie ma gotowego template.