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!

Kamil Klimek

Od 2016 jestem programistą Java. Przez pierwsze 4 lata pracowałem jako Full Stack Java Developer. Później postanowiłem postawić nacisk na Javę, żeby jeszcze lepiej ją poznać.

Subscribe
Powiadom o
guest
0 komentarzy
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x