Omówienie aplikacji domowej – część I
Witamy się w kolejnym tygodniu kursu – już piątym. Klasycznie już zaczniemy od omówienia zadania w ramach tworzenia aplikacji. Omówmy jak najszybciej moje podejście do rozwiązania, aby móc przejść do kolejnych materiałów.
Wyjątki
Pierwszym twoim zadaniem było stworzenie trzech wyjątków, które mają posiadać konstruktor parametrowy i bezparametrowy. Nic trudnego, jedynymy zagadnieniem, które mogłeś pominać to fakt, że wyjątki muszą być checked.
Szybkie przypomnienie z lekcji o wyjątkach i wiemy, że wyjątki checked dziedziczą po klasie Exception.
W takim razie jeden z trzech wyjątków wygląda tak:
package exception; public class UserLoginAlreadyExistException extends Exception { public UserLoginAlreadyExistException() { } public UserLoginAlreadyExistException(String message) { super(message); } }
Oczywiście kolejne dwa wyglądają podobnie. Pamiętaj, aby wszystkie umieścić w paczce exception.
To na tyle na temat wyjątków przejdźmy dalej.
UserValidator
Kolejnym zadaniem było stworzenie klasy odpowiedzialnej za walidację dodawanego Usera.
Miała ona sprawdzać trzy możliwości:
- Hasło musi mieć długość co najmniej 6 znaków,
- Login musi mieć minimum 4 znaki,
- Login nie może jeszcze istnieć.
Dodatkowo klasa ma być Singletonem – dlatego konstruktor jest prywatny, a została wystawiona metoda getInstance (przypominam, że metoda jest odpowiedzialna, za zwracania jednego jedynego egzemplarza obiektu).
private static UserValidator instance = null; private UserValidator() { } public static UserValidator getInstance() { if (instance == null) { instance = new UserValidator(); } return instance; }
Skoro nasza klasa jest już singletonem to czas stworzyć metodę isValid(User user) do sprawdzania poprawności danych, która składa się z trzech prywatnych metod.
public boolean isValidate(User user) { if (isPasswordLengthEnough(user.getPassword())) return false; if (isLoginLengthEnough(user.getLogin())) return false; if (isLoginAlreadyExist(user.getLogin())) return false; return true; }
Każda możliwość została rozrzucona do prywatnych metod – dlaczego?
Ponieważ kod staje się czytelniejszy, zaś metody prywatne i tak są widoczne tylko w klasie.
Rzucanie wyjątkami
Skoro mamy już walidator to zamiast zwracać false, niech rzuca odpowiedni wyjątek zależnie od tego co jest źle w podanych danych.
public boolean isValidate(User user) throws UserLoginAlreadyExistException, UserShortLengthLoginException, UserShortLengthPasswordException { if (isPasswordLengthEnough(user.getPassword())) throw new UserShortLengthPasswordException("Password is too short."); if (isLoginLengthEnough(user.getLogin())) throw new UserShortLengthLoginException("Login is too short."); if (isLoginAlreadyExist(user.getLogin())) throw new UserLoginAlreadyExistException("User with this login already exists."); return true; }
Do rzucenia wyjątków oczywiście wykorzystujemy słowo throw oraz wczesniej stworzone wyjątki.
I w taki o to sposób mamy wykonane 3 zadania – oczywiście z grubsza. 😉
Koniec
To tyle w pierwszej części, w drugiej zajmiemy się kolejnymi trzema zadaniami – czyli refaktoryzacją serwisów.