Portable Class Library, czyli tworzenie logiki współdzielonej cz.1

Ostatnio zauważyłem, że produkty Microsoftu skierowane dla programistów stają się coraz przyjemniejsze i coraz bardziej zautomatyzowane. Microsoft stara się jak może, żeby umilić nam codzienne zmagania w pracy. Jednym z takich produktów, o których nie wiele osób piszących aplikacje mobilne pod systemy Microsotfu (Windows Phone i Windows 8) wie jest Portable Class Library. Co to jest i co można w nim zrobić? Postaram się opisać w tym oraz w kolejnych postach dotyczących właśnie PCL-a.

Od wielu programistów Androida słyszę zarzuty, że pisanie pod Androida jest lepsze, bo robią jedną aplikację i działa ona zarówno na tabletach i smartfonach. Wtedy zazwyczaj się uśmiecham i odpowiadam, że dla mnie to największy minus Androida. :) Całe szczęście Microsoft nie poszedł w tą samą stronę, lecz pomyślał trochę i zaprezentował nam, już razem z Visual Studio 2012 bibliotekę, która może być dołączana zarówno do aplikacji Windows Phone jak i Windows Store.

pcl-createproject

Ok, trochę oszukałem… może być dołączana nie tylko do mobilnych aplikacji, ale również do aplikacji Silverlight-owych oraz zwykłych aplikacji pisanych pod .NET Framework. A nawet, za pomocą Xamarin, aplikacji Android-owych oraz IOs-owych.

PCL-Dialog

Oczywiście biblioteka działa na częściach wspólnych, więc im więcej projektów wybierzemy, tym mamy mniej możliwości do wykorzystania. Należy się więc zastanowić co chcemy umieścić jako części wspólne. Może to być oczywiście połączenie do bazy danych, nie będziemy musieli pisać 2 razy tych samych DAO, helpery działające bez specyficznych operacji dla systemu, bądź ViewModele jeśli posiadamy identyczne dla obu systemów. Dodatkowo można wydzielić interfejsy w przypadku gdy oba systemy posiadają podobną funkcjonalność, ale sama implementacja wygląda inaczej. Przykładem takiego interfejsu może być robienie zdjęć. Zarówno w Windwos 8 jak i Windows Phone 8 istnieje możliwość pobrania zdjęć z aparatu (bądź kamerki). W obu systemach jednak implementuje się to inaczej. common-architectureAktualnie właśnie zacząłem pisanie takiej biblioteki, która zawierałaby wszystkie części wspólne tych systemów i wystawiała interfejs dla PCL’a. Nie wiem ile zajmie mi napisanie implementacji 9 interfejsów, jakie do tej pory znalazłem więc nie podaje daty kiedy kod pojawi się na githubie ;)

Post ten miał na celu opisanie tego czym jest PCL i zachęcenie do używania go, nawet jeśli nie mamy w planach (na razie) robienie aplikacji na inny system. W kolejnym poście postaram się pokazać jak zaimplementować wzorzec MVVM używając PCL i MVVMLight.