Aplikacja domowa – zadanie
Czas na zakończenie tygodnia 7, oczywiście w takim stylu jak zawsze – czyli aplikacją domową. Zadaniem przygotowanym specjalnie dla Ciebie.
Nie będę przeciągał, przejdźmy do konkretów.
Baza danych
W dwóch poprzednich tygodniach poznałeś podstawy relacyjnych baz danych, czas je trochę wykorzystać w naszym projekcie. Oczywiście nie całym. 😉
Na początek stwórz bazę danych management, a w niej tabelę users wraz z polami:
- ID (primary key + auto increment)
- login (unique, 50 znaków, not null)
- password (50 znaków, not null)
UserDao
Gdy masz już tabelę możemy ją wykorzystać w naszej aplikacji – oczywiście do zapisywanie użytkowników – Userów.
Interfejs UserDao wygląda aktualnie tak:
public interface UserDao { void saveUser(User user); void removeUserById(Long userId); void removeUserByLogin(String login); List<User> getAllUsers(); void updateUser(User user); }
Stwórz dla niego implementację, przy użyciu SQL i JDBC – pamiętaj o odpowiednim dependency w swoim projekcie – mam na myśli oczywiście o odpowiednie Drivery. 😉
Refaktoryzacja serwisów
Mamy niemały nieporządek z wyjątkami, czas się nimi zająć. Zrefaktoryzuj UserService oraz ProductService, tak aby nie zawierały żadnych bloków try-catch. Niech throwują wyjątki, łapać będziemy je w warstwie wyżej – w fasadach.
UserFacade
Interfejs UserFacade lekko się zmienił – tym razem zwracamy Stringa:
public interface UserRegisterLoginFacade { String registerUser(User user); boolean loginUser(String login, String password); }
Zrób dodatkową refaktoryzację fasady, tak aby łapać w niej wyjątki z serwisów i zwracać wiadomości (message) zawarte w wyjątku.
ProductFacade
Do naszsej aplikacji dołącza kolejna fasada – odpowiadająca za operację na produktach.
Tak wygląda jej interfejs:
public interface ProductFacade { String createProduct(Product product); String removeProduct(String productName); List<Product> getAllProducts(); }
Tak jak w UserFacade zrób tak, aby złapać w fasadzie wszystkie wyjątki i zwracać odpowiednią wiadomość w Stringu.
Inne
Oczywiście powyższe zadania będą wiązać się z dodatkowymi pomniejszymi zadaniami, które będziesz musiał wykonać m.in. zmiany będzie potrzebowała klasa Main.
Jej menu będzie wyglądać tak:
public static void startMenu() { System.out.println("MANAGEMENT MENU"); System.out.println("1 - Zaloguj się"); System.out.println("2 - Zarejestruj się"); System.out.println("0 - Wyjdź"); } public static void loggedMenu() { System.out.println("MANAGEMENT MENU"); System.out.println("1 - Dodaj nowy produkt"); System.out.println("2 - Usuń produkt"); System.out.println("3 - Wyświetl dostepne produkty"); System.out.println("0 - Wyloguj się"); } public static void productTypeMenu() { System.out.println("1 - Dodaj buty"); System.out.println("2 - Dodaj ubrania"); System.out.println("3 - Inne"); }
Zrefaktoryzuj klasę Main tak, aby korzystała tylko z UserFacade oraz ProductFacade.
PS Usuwanie produktu zrób po nazwie.
Podsumowanie
Jeśli coś oczywiście nie jest dla Ciebie zrozumiałe to zadaj pytanie – mam nadzieję, że nie zapomniałem o żadnym ważnym szczególe w tej całej układance. Zgłaszaj mi wszystko co cie zastanawia, jak zawsze postaram się Ci pomóc jak najlepiej potrafię.
Moje przykładowe rozwiązanie, którym możesz się wspierać możesz znaleźć tutaj.
Życzę powodzenia i dużo samozaprcia podczas rozwiązywania zadania – a my widzimy się już w tygodniu 8!