Wpis z mikrobloga

Cześć,
stworzyłem sobie klasę pomocniczą do rejestracji w której trzymam jsony:

public class RegistrationControllerHelper {
public static final String validCredentials =
"{\"username\": \"New\", \"email\": \"new@mail.com\", \"password\": \"Password#3\"}";
public static final String invalidCredentials =
"{\"username\": \"invalid\", \"email\": \"invalid\", \"password\": \"invalid\"}";
public static final String malformedRequest =
"{\"username\": \"New\", \"email\": \"new@mail.com\", \"password\": \"Password#3\"";
public static final String emptyCredentials =
"{\"username\": \"\", \"email\": \"\", \"password\": \"\"}";
}

I teraz pytanie na takim przykładzie. Mam taki test:

@test
@Transactional
void whenRegistrationSuccess_Return201() throws Exception {
// given
String registrationJson = RegistrationControllerHelper.validCredentials;

// when & then
mockMvc.perform(post(registrationUri)
.contentType(MediaType.APPLICATION_JSON)
.content(registrationJson))
.andExpect(status().is(201));
}

czy mogę i powinienem zamiast
String registrationJson = RegistrationControllerHelper.validCredentials;
napisać
String registrationJson = validCredentials;
Czy to będzie czytelne i zgodne z dobrymi praktykami ?

#java #naukaprogramowania #spring
  • 11
  • Odpowiedz
@Kamishimi: no możesz jak to odpowiednio zaimportujesz, ale niekoniecznie powinienes - to utrudnia nawigacje w kodzie, robi bałagan w przestrzeniach nazw, a w ogóle to korzystanie z takich klas z polami tego typu to antypattern ( ͡° ͡°)
  • Odpowiedz
@Kamishimi: bo ja wiem czy powinieneś? Zbyt obszerne spuszczanie się nad clean code do niczego dobrego nie prowadzi

Ja bym proponował zostawić jak jest, ale już nie ucinać tej klasy przed nazwa stałej. Może jakiś skrócić nazwę żeby to było bardziej zgrabne? RegistrationRequests np?

Może zamiast klasy by użyć jakiegoś enuma?
  • Odpowiedz
Jak tworzysz pola final static (stałe) to używaj upper case'u w nazewnictwie. Np. validCredentials -> VALID_CREDENTIALS
  • Odpowiedz
@Kamishimi: Ja osobiscie nie tworzyłbym RegistrationControllerHelper, która trzyma same stringi, które w rzeczywistości używasz tylko w jednej klasie. Już nie raz widziałem repo, w którym były klasy które posiadały dzisiątki zmiennych, które w rzeczywistości były używane tylko w jednym miejscu. No ale odpowiadając na Twoje pytanie: Nie ma znaczenia. :)

O ile nie masz jakiegos standardu odgórnie narzuconego, to możesz zrobić jak uważasz. To nie wpływa na czytelność, jedynie
  • Odpowiedz
@Kamishimi:
1. Nie tworzyłbym żadnych Helperów - co taka klasa oznacza? Sam widzisz, że nie do końca wiesz co ona robi i tak ją nazwałeś ( ͡° ͜ʖ ͡°)
2. Jeżeli jest to używane tylko przez test to dałbym to do klasy testowej
3. W nowszej wersji Java możesz użyć """ aby zrobić wielolinijkowy String i wtedy nie bedziesz musiał escepować \"
4. Nie wiem jaka jest logika biznesowa, ale zazwyczaj nie wysyłamy Stringów tylko klasę któa jest parsowana na json. Jeżeli się da to stworzyłbym klasę która trzyma te pola.
5. Jak już koniecznie chcesz to dać do
  • Odpowiedz
@Kamishimi:
1. Dalej nie widzę sensu wydzielanai osobnej klasy

new RegisterRequest("New", "new@mail.com", "Password#3");
to nie jest jakaś skomplikowana logika którą należy wydzielić, tylko integralna część testu
2. Jak już chcesz coś wydzielac to raczej
  • Odpowiedz