Plan zajęć cz. 7 – Optymalizacja
W tym tygodniu poprawiłem niektóre funkcjonalności aplikacji desktopowej. Ostatnim razem podczas szybkiego przełączania się pomiędzy tygodniami było odczuwalne opóźnienie przy przełączaniu. Dodatkowo aplikacja desktopowa została w końcu przekształcona na styl widgetu.
Optymalizacja tygodni
Kluczową rzeczą podczas tworzenia aplikacji jest płynność jej działania. Opóźnienia psują cały urok aplikacji. Aby mieć pewność, że użytkownik nie będzie musiał czekać, na wyświetlanie kolejnych tygodni zmodernizowałem metody generujące tydzień, aby generował zestawy tygodni. W ten sposób wygeneruje wszystkie tygodnie na samym starcie. Później pozostaje tylko wyświetlić odpowiedni tydzień.
Widget
Aplikacja nie powinna posiadać standardowego przycisku umożliwiającego jej zamknięcie czy jakiejkolwiek ramki. Jest to dosyć proste do osiągnięcia wystarczy ustawić parametr WindowStyle okna na None. Dodatkowo aplikacja powinna zmieniać swoją pozycję na pulpicie, kiedy użytkownik trzymając wciśnięty lewy klawisz myszy równocześnie porusza myszką. W tym celu stworzyłem specjalną metodę rozszerzającą UIElement przesuwającą okno aplikacji. Ostatnim elementem pozostaje jakiś sposób na wyłączenie aplikacji. W tym przypadku dodałem menu kontekstowe, które wyświetla się po naciśnięciu prawym przyciskiem myszy na jakikolwiek element aplikacji.
IoC
Odwrócenie sterowania w przypadku tworzenia aplikacji na kilka platform jest idealnym rozwiązaniem na implementowanie specyficznych kodów dla każdej platformy, zachowując jednak jedną warstwę logiki bez konieczności sprawdzania, na jakiej platformie jest kod uruchamiany. Pierwotnie zastosowałem kontener Ninject, niestety okazało się, że są jakieś problemy z Xamarinem, więc w ciągu następnego tygodnia będę zmieniał kontener na Autofac.
Kończąc
Coraz bardziej podoba mi się kod aplikacji, który napisałem. Jako że zbliża się koniec roku i mogę śmiało powiedzieć, że moje umiejętności programistyczne od początku roku się znacznie poprawiły. Kod, który piszę, jest ładniejszy, lepiej zorganizowany oraz łatwiej rozszerzalny poprzez zaczęcie korzystania z serwisów, oraz wstrzykiwania zależności.
Aplikacja jest prawie ukończona, pozostało dopisanie automatycznego logowania, aby można było z niej w przyjemny sposób korzystać. Później zostaje tylko dopracowanie mechanizmów przechowujących ustawienia oraz różne powiadomienia o zmianach w planie i jak i ocenach.
Cały kod aplikacji można zobaczyć na moim koncie github /kkolodziejczak/ZUTSchedule