Zaprojektowanie i implementacja aplikacji z wykorzystaniem kontenerów danych (tablice, kolekcje) oraz szablonów (generics).
Celem zajęć jest zbudowanie aplikacji pozwalającą na interakcję z użytkownikiem z poziomu konsoli. Aplikacja będzie realizować uproszczona wizję przepływu feedbacku w firmie zainspirowaną koncepcjami Raya Dalio przedstawionymi w książce "Zasady", gdzie głównym użytkownikiem będzie manager zarządzający firmą.
Dostępne będą dwie główne funkcjonalności:
Ogólne uwagi odnośnie aplikacji
W zadaniu występuje wyraźny podział między logiką aplikacji a jej interfejsem. Należy zadbać o tą separację w odpowiedni sposób. Absolutnym minimum jest zaproponowanie odpowiedniego nazewnictwa pakietów i zapewnienie hermetyczności między nimi za pomocą interfejsów. Dodatkowo punktowanym rozwiązaniem jest stworzenie kilku plików JAR np. jeden zawierający wspólne klasy odpowiedzialne za interakcje z logiką za pomocą linii komend, a drugi odpowiednie klasy, serwisy, walidatory i metody persystencji.
Dodatkowo należy zadbać o "kompletność" rozwiązania. Aplikacja oceniana będzie głównie z perspektywy finalnego użytkownika. Należy więc wczuć się w jego rolę (może poprosić osobę niezaangażowaną o opinię). Polecam zwrócić szczególną uwagę na kwestie takie jak walidacja danych wejściowych i obsługa błędów (np. złe parsowanie dat, wartości numerycznych, niepoprawnych wyborów).
W zależności od projektu interfejsu dane mogą trzymane być w pamięci (np. w formie listy), serializowane na dysku, bądź w bazie danych (np. SQLite). Pierwsza opcja jest najprostsza jednak testowanie (bez automatyzacji) będzie bardziej skomplikowane ze względu na konieczność powtarzania wszystkich instrukcji. Może da się opracować sposób testujący aplikację w interaktywny sposób (np poprzez odpowiednie skryptu jak np. tutaj).
<aside> 💡 Proponuję podejście w którym aplikacja reprezentuje wewnętrznie stan za pomocą typizowanych kolekcji, które są serializowane/deserializowane do pliku na dysku.
</aside>
Log decyzyjny
Wartością logowania podjętych decyzji jest możliwość przeanalizowania czy były dobre z perspektywy czasu. W przypadku tego trybu dostępne funkcjonalności powinny wyglądać następująco: