klasy do obsługi io

klasy do obsługi io
PY
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 10 lat
  • Postów:12
0

W java mamy wiele klas do obsługi io. W wielu tutorialach pokazywane jest jak to obchodzić się z takimi klasami. Czyli tworzenie strumienia i dekorowanie go bajerami, a potem pętelka i zamykanie.

Moim zdaniem w stosunku do innych języków obsługa takich strumieni jest złożona i przede wszystkim trochę toporna w używaniu. Wiadomo takie zoo klas jak w Java jest bardziej elastyczne w dostosowaniu do własnych potrzeb i lżejsze, bo płacisz za to co używasz. Zastanawiam się czy jawne tworzenie strukiemieni i filtrów opłaca się na dłuższą metę? Przykładowo ja w swoim domowym projekcie wydzielam takie moje najczęstsze procedury do pracy z plikami, bym nie musiał pisać w koło tego samego. Widziałem, że apache commons oferuje coś podobnego.

Zastanawia mnie jak inni programiści lubią pracować z takimi klasami? To też zastanawia mnie czy takie jawne tworzenie strumieni niesie w sobie jakieś dodatkowe korzyści - np. łatwość w testowaniu?

0

Te klasy o których piszesz zaliczają się do wszelakich utils'ów i commons'ów. A utils'y i commons'y to podstawa każdego źle zaprojektowanego systemu ;)

Tak czy inaczej - warto znać kilka takowych commonsów (Apache i Google w pierwszej kolejności). Po to właśnie, żeby - zamiast implementować samemu - mieć od razu przetestowane i gotowe metody do użycia.

"Zastanawia mnie jak inni programiści lubią pracować z takimi klasami?"
Nie muszą lubić, ale jakoś tak się zawsze składa że takie klasy bardzo często są tworzone w trakcie albo utrzymania, albo rozwoju projektu.

"To też zastanawia mnie czy takie jawne tworzenie strumieni niesie w sobie jakieś dodatkowe korzyści - np. łatwość w testowaniu?"
Jawne tworzenie strumieni ma chyba na celu podnieść wydajność oraz elastyczność rozwiązania. IMO testowanie może utrudnić, bo wszelakiego rodzaju commons'y już są właśnie przetestowane, w przeciwieństwie do własnych rozwiązań, które trzeba samodzielnie przetestować.
W przypadku własnych, wydzielonych bibliotek z klasami do obsługi strumieni - jeśli tylko masz je pokryte testami - to rzeczywiście może uprościć sprawę, ponieważ wiesz z góry, czego się spodziewać.

Koziołek
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:minuta
  • Lokalizacja:Stacktrace
  • Postów:6822
1

@pyjoker, w API też są odpowiednie klasy, które pozwalają na "bezstrumieniową" obslugę plików np. Files. Generalnie coraz wiecej utilsów włączane jest do głównej biblioteki.

Co do testowania to dużo zależy od tego jak napisany jest kod. Generalnie jak korzystasz z metod statycznych to trudnosć testu rośnie, choć można to zrobić z uzyciem np. PowerMockito. Jeszcze trudniej (bez użycia prawdziwej magii) przetestować jest coś takiego:

Kopiuj
void method(String filePath){
    FileStream fs = new FileStream(filePath);
    //...
}

Ponieważ ręcznie tworzysz obiekt, który będzie bił bezpośrednio do dysku (to jest naprawdę ciężko zamockować). Tutaj z pomocą przychodzi odpowiednio napisana reguła AspectJ i podmiana w locie... trudne.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
PY
Świetna odpowiedź, dzięki!
KA
to prawidłowo powinno się zrobić instance variable private FileStream fs; i dodać settera czy jak?
SM
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 6 lat
  • Postów:52
1
Koziołek napisał(a):

Ponieważ ręcznie tworzysz obiekt, który będzie bił bezpośrednio do dysku (to jest naprawdę ciężko zamockować). Tutaj z pomocą przychodzi odpowiednio napisana reguła AspectJ i podmiana w locie... trudne.

W PowerMockito można też to zrobić :

Kopiuj
whenNew(MyClass.class).withNoArguments().thenReturn( myMock);
Shalom
Analogicznie w PowerMock dla EasyMocka można zrobić expectNew(MyClass.class,arguments).andReturn(myMock); ;)
Koziołek
Nadal mockujesz kasę, która tworzy FileStream, a nie konstrukcję new FileStream(), która jest elementem metody.
Shalom
Nie nie, możesz mockować też sam FileStream jak chcesz. Możesz tak mockować wszystko, nawet klasy final :P W miejsce MyClass.class można wstawić cokolwiek.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.