PR0GRAMISTA
DevLog #2

Ten tydzień minął zdecydowanie za szybko.

Todo

Zrobiłem endpointy dla list do zrobienia. Są bardzo podobne jak te dla nawyków, ale zapewne jeszcze to nie koniec ich tworzenia. Prawdopodobnie będę zmuszony stworzyć jeszcze dodatkowe endpointy dla obsługi samej listy zadań a nie całego obiektu Todo.

Testy!

Ten tydzień rozpocząłem tworzeniem testów.

Nie jestem z nich do końca zadowolony, ale spełniają swoją rolę i nie odpalają się jako testy integracyjne a jako zmockowane testy jednostkowe. Dzięki temu zabiegowi odpalają się znacznie szybciej, ale za to nie testują repozytoriów pod Hibernate.

@Test
public void create() throws Exception {
    //This is used as a request body
    Habit modifiedHabit = new Habit.HabitBuilder("6")
            .description("xxwxw")
            .expReward(400.23F)
            .coinReward(1.0F)
            .build();

    when(habitRepository.save(any(Habit.class))).thenReturn(neHabit.HabitBuilder(modifiedHabit).id(1).build());

    mockMvc.perform(post("/habit/")
            .content(mapper.writeValueAsString(modifiedHabit))
            .contentType(MediaType.APPLICATION_JSON_UTF8))
            .andExpect(status().isOk());

    ArgumentCaptor captor = ArgumentCaptor.forClass(Habit.class);
    verify(habitRepository, atMost(1)).save(captor.capture());
    assertThat(captor.getValue(), allOf(
            hasProperty("id", is(nullValue())),
            hasProperty("expReward", is(400.23F)),
            hasProperty("coinReward", is(1.0F)),
            hasProperty("title", is("6")),
            hasProperty("description", is("xxwxw")),
            hasProperty("owner", is(notNullValue()))
    ));
}

Wykorzystanie wzorca Builder, frameworka Mockito, matcherów Hamcrest i jeszcze Springowego mockMvc. Piękne połączenie. W moim arsenale brakuje mi jeszcze Spocka, ale jeszcze przyjdzie na niego czas.

Tak wygląda strona główna. Stock z pexels.com, przycisk do logowania (OAuth), logo i jakże błyskotliwe motto.

Szablony i style CSS

Chciałem aby Workdone byl wykonany w stylistyce Material. Oczywiście implementowanie samemu tych wszystkich pól, animacji etc. jest po prostu bez sensu. W sieci mamy dostępnych kilka frameworków, które mają to zrobić za nas.

Ja spotkałem z takimi jak:

  • Material Design Lite --- framework od Google, dobrze wygląda, ale często ingeruje w niego JavaScript, jeszcze gorzej jest gdy próbujemy w nim coś zrobić inaczej niż twórcy przewidywali.
  • Materialize --- nie wygląda tak dobrze jak MDL, ale za to jest o wiele czystszy, uniezależniony od JS. To właśnie ten framework wykorzystuje przy Workdone.
  • Bootstrap z motywem Paper --- Bootstrap to solidny wybór, ale motyw Paper nie tworzy z niego idealnego Material Design. Idealny, kiedy nie potrzebujemy fajerwerków a wystarczą nam podstawowe kontrolki. Moje małe demo.
  • Material-UI --- dla Reacta, tyle o nim wiem.
  • Polymerowe Paper Elements --- Polymer to wciąż eksperyment, wiele rzeczy robi wspaniale, ale czasem można dostać szału od dziwnych, nieprzewidywalnych zachowań.

Na początku chciałem użyć MDL, ale chciałem uniknąć implementowania wymarzonego bocznego panelu. Materialize zrobił to za mnie (+ nie miał problemu z checkboxami).

Dashboard wygląda nieźle a edytowanie i tworzenie nawyków już działa. Wciąż jednak jest masa roboty.

Vue.js

Ahh te frameworki JavaScriptu. W sumie to jest cała istota HellScriptu. Kilku frontendowców się spotyka i zaczynają: O nie! Przydałoby nam się X. O wiem! Zróbmy kolejny framework, lepszy od innych...

Zacząłem tak negatywnie, ale tak naprawdę to Vue.js jest całkiem niezły. Oprócz sposobu działania komponentów w osobnych plikach to nie mam narazie do czego przyczepić.

Lubię prostotę Angulara 1 i Vue robi to jeszcze lepiej. Wszystko jest stosunkowo logiczne i nie ma takich dziwnych barier między klasycznym JS a frameworkiem. Ba! Vue.js praktycznie zmusza do użycia innych frameworków, bo sam w sobie nie ma np. klienta HTTP a proponuje użycie np. axios.

Vue ma również swoje devTools w postaci rozszerzenia dla Chrome. Jak to skomentował nasz rodak: Urywa dupsko

O Vue.js jeszcze pewnie się kiedyś wypowiem, bo jak narazie to widzę tylko wierzchołek góry frameworkowej.

EOF

Czeka mnie łączenie backendu z frontendem. Trochę już zacząłem to robić i już teraz wiem, że będę musiał przemyśleć na spokojnie jak to zrobić by wszystko się nie wykrzaczyło. Pewnie czeka mnie też kolejna walka z stylami. Nie życzę tego nikomu.

Dziwi mnie, że ludzie zaakceptowali CSSa i JavaScript.

Ten tydzień: 40% Testy, 40% styl, 20% Vue.js

19 marca 2017
dsp2017 workdone javascript