Zapewne część z Was zastanawia się w jaki sposób na widgetach pojawiają się różne wartości pomiarowe – napięcie, prędkość, ilość paliwa. Skąd pobierane są te informacje? Najbardziej intuicyjnym podejściem wydaje się być odpytanie z poziomu samego widgetu odpowiedniego kanału diagnostyki lub czujnika. Jeżeli spojrzymy w kod źródłowy podobnych systemów dostępnych w sieci, okaże się, że jest to bardzo często spotykane rozwiązanie.
Jeśli z kolei sięgniemy do wcześniejszych rozważań, zauważymy, iż tego rodzaju podejście jest sprzeczne z naszymi założeniami, gdyż wymusza przeplatanie się wysokopoziomowego kodu aplikacyjnego z kodem platformowym.
Czyżby ponownie miał pojawić się podział na warstwy?
Bingo! Ale spokojnie, tym razem będą tylko dwie. Osoby zajmujące się programowaniem zapewne domyślają się już, że chodzi tu tytułowy frontend oraz backend
Ok. A czym one właściwie są?
Frontend to najogólniej interfejs użytkownika; to co widzimy patrząc w ekran. Jego zadaniem jest prezentacja danych – nie tylko samo ich wyświetlenie, ale również np. konwersja na format zrozumiały dla człowieka. Backend, jak sugeruje nazwa, jest niewidoczny dla użytkownika i jego główną rolą jest zbieranie i dostarczanie danych do frontendu.
Jak przekłada się to na nasz projekt?
W skład frontendu wchodzi tworzony przez nas aktualnie system widgetów. Ich rola ograniczona została tylko i wyłącznie do wyświetlania danych na ekranie. Zadanie zbierania danych z różnych źródeł i przekazywania ich na żądanie do widgetu spoczywa na barkach backendu. W jego skład wchodzą stworzone wcześniej komponenty obsługujące źródła danych: diagnostykę oraz magistralę CAN.
Schemat interakcji wygląda następująco:
Zaletą powyższego podejścia jest przede wszystkim konsekwentne separowanie części aplikacyjnej od platformy. Co więcej, użycie demona/usługi danych pomiarowych umożliwia późniejsze wykorzystanie go jako źródła dla innych aplikacji,a nie jedynie dla widgetów. W ten sposób, niejako przy okazji, powstała elastyczna i dość uniwersalna platforma, funkcjonalnie zbliżona do bazy danych.