PCL czy SharedProject

0

Cześć, czytam, czytam i jedni mówią, że lepiej użyć SharedProject, inni, że PCL.
A Wy jak myślicie?
Założenia projektu:

  1. Obsługa bazy danych (SQLite, MySQL)
  2. Obsługa plików (zapis na dysk, sprawdzenie, czy plik istnieje)
  3. Współdzielony projekt (Shared, czy PCL) musi posiadać coś w stylu binarnych zasobów (wiem, że PCL nie może posiadać binarnego zasobu, a SharedProject w ogóle zasobów, ale w PCL można to obejść, nie wiem, czy w SP też)
  4. Projekt tworzony pod Windows desktop, ale w przyszłości (kilka miesięcy, góra rok) ma też być dostępny na innych urządzeniach, np. na Androidzie.
  5. Projekt współdzielony musi być testowany (unit testing)

Projekt współdzielony będzie tylko w obrębie solucji, a więc to nie musi być osobna DLLka.

Więc co byście wybrali i dlaczego? Albo czego nie i dlaczego ;)

Próbowałem i SharedProject, i PCL i nadal się miotam. Już wiem, że jeśli chodzi np. o PCL i SQLite, to (mimo, że znalazłem JAKĄŚ bibliotekę SQLite PCL) lepiej by było, żeby każda platforma miała swoją własną implementację SQLite. A sam PCL korzystał tylko z interfejsu. I tu kolejne pytanie - jak dobrze to oprogramować? Tzn. w którym momencie i w jaki sposób najlepiej zarejestrować klasy implementujące interfejsy PCL? Czytałem o czymś takim jak DependencyService, ale zdaje się, że to jest tylko pod Xamarin.Forms.
SharedProject wydaje się prostszy. Nie muszę stosować #ifdef, mogę robić partial classes.

I pytanie, jak to dobrze testować. Bo w przypadku SP, muszę mieć dodatkowy projekt, który tak naprawdę będzie testowany. Czyli mam 3 projekty: SharedProject, TestProject i jakiś dodatkowy projekt, który będzie testowany (nie można przetestować tylko SharedProject). Z drugiej strony w przypadku PCL, też muszę mieć jakiś trzeci projekt, który będzie testowany, bo musi implementować interfejsy. Dobrze myślę?

0

PCL wymusi ci cross-platformowość. Po prostu nie masz możliwości napisać kodu, który nie będzie działał na najmniejszym wspólnym fragmencie platformy. W shared znacznie łatwiej wprowadzasz #ifdef i już masz spaghetti.

0

Nie muszę w Shared posługiwać się #ifdefami. Mogę równie dobrze tworzyć częściowe klasy. W ten sposób unikam #ifdefów. Tworząc częściowe klasy też unikam dodawania odpowiednich bibliotek do usingów (czyli całkowicie mogę wyeliminować #ifdefy)

1 użytkowników online, w tym zalogowanych: 0, gości: 1