Prośba o code review

0

Słowem wstępu. Zajmuje się programowaniem od początku tego roku. Napisalem prosty programik wg. otrzymanych specyfikacji, ktory konsumuje API archiwum Narodowego Banku Polskiego. Program pobiera kursy sprzedaży i kursy kupna dla danej waluty w określonym przedziale czasowym, a potem liczy sobie z tego średnią kursów kupna i odchylenie standardowe kursów sprzedaży. Tutaj moja implementacja.

Nie zajmowałem się jeszcze wątkami, dlatego aplikacja działa wolno (musiałem pobierać daty z plików xml). Prosty workaround polegałby na użyciu innego Predicate w metodzie getXmlFileNames(Predicate<String> predicate), który selekcjonowałby pliki jeszcze przed ich parsowaniem. Cel na najbliższe dni, to lektura "Concurrency in practice" i poprawa wydajności. No ale zanim to nastąpi, byłbym wdzięczny jeśli ktoś znalazłby chwilę na skomentowanie tego co widzi.

Od siebie dodam, że mam problem z testami. Im dalej, tym kod robi się coraz bardziej nieczytelny. Problem widać w DailyRatingFilterTest. Jest jakiś sens pisania testów dla XmlParserImp? W końcu ta klasa jest tylko wraperem dla zewnętrznych bibliotek. Przydałyby sie też testy dla ContextBuilder'a, ale w obecnej sytuacji byłby tam niezły misz-masz.

4
    public List<Record> getContent() {
        if (content == null) {
            content = new ArrayList<Record>();
        }
        return this.content;
    } 

zapominasz(albo robisz to celowo) access modifiers https://github.com/sdwsk/nbp/blob/master/src/main/java/pl/parser/nbp/services/DirCrawlerImp.java

Te Twoje metody robią trochę za dużo miejscami, np tutaj:
https://github.com/sdwsk/nbp/blob/master/src/main/java/pl/parser/nbp/services/DirSelector.java

wolałbym widzieć np:

    public List<String> getXmlDirs() {
        List<String> nbpDirectoryNames = new ArrayList<>();
        costammetodacosasd(nbpDirectoryNames );
        jakasmetodacosasdad(nbpDirectoryNames );

        return nbpDirectoryNames;
    }

weź tam wepnij jakieś DI, Springa albo tego Guice czy Picko

Piszesz coś o wielowątkowości, zacznij od razu od ludzkiej strony
https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html

P.S
@karolinaa chciała też zaproponować że jak chcesz to napiszę Ci ten program na nowo, za drobną opłatą :D

0
  1. To akurat kod automatycznie wygenerowany przez JAXB na podstawie .xsd, nie zagladalem tam poza jedna mala modyfikacja.
  2. Zapominam, widze ze musze sie bardziej nad tym skoncentrowac.
  3. Racja
  4. Mialem zamiar wpiac Springa po watkach.
    P.S ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1