niedziela, 4 listopada 2012

Teoria mostów - rewizja

Pewien czas temu opisałem w poście Testowanie na granicach systemu konstrukcje jakich używałem aby ułatwić sobie tworzenie mocków testowych w miejscach gdzie nasz system styka się np. z systemem plików. Jeśli komuś nie chce się czytać to chodziło w nim o to aby zamiast pisać w 10 miejscach new File stworzyć specjalny "connector", który łatwo da się zmokować w Mockito.

Nadal uważam, że koncepcja była trafiona ale realizacja pokazała kilka uchybień (bądź dla osób trawiących bardziej dosadne określenia - kilka spierdolin). Najgorsze było to, że klasa FileSystemConnector zaczęła zamieniać się w jedna wielką zbieraninę średnio ze sobą powiązanych metod. Było to bardzo niedobre, bardzo bardzo złe...

Na Amazon

Czasami jest tak, że dopiero mocne jebnięcie budzi nas z letargu. Tak było i tym razem kiedy okazało się, że pliki będą czasem składowane w lokalnym systemie plików a czasem na "Amazon S3" ®™© . Bez wchodzenia w zbędne szczegóły FileSystemConnector zastąpiliśmy abstrakcją FileStorage , która razem z kilkoma innymi mechanizmami stworzyła w moim obecnym mniemaniu rozwiązanie całkiem całkiem obiektowe. Abstrakcję można nadal mockotwać a ją samą testuję testami integracyjnymi. Nie to jest jednak najciekawsze...

(Przedwczesna?) Abstrakcja

Krąży po necie koncept zwany Przedwczesną abstrakcją co podobnie jak przedwczesna optymalizacja ma negatywne konotacje (moja polonistka byłaby ze mnie dumna!). Tutaj jednak okazało się, że taka przedwczesna abstrakcja upraszcza kod w znacznym stopniu ułatwiając z nim pracę.

Już po pierwszej serii refactoringu, zanim jeszcze dodaliśmy cokolwiek związanego z S3, statystyki w sonarze wykazały tendencję pozytywną :

Rys1. Generalnie FileSystemConnector skaził troszeczkę także klasy korzystające z niego dlatego widać tutaj ogólną poprawę.





Rys2. Na powyższym widać, że najbardziej zjebane metody były gdzieś w tym obszarze.





Rys3. Tutaj podobnie jak w poprzednim punkcie.





Rys4. Podobnie jak przy pierwszym wykresie tak i tutaj widać ogólne uproszczenie w klasach.





Rys5. W tej zaś metryce nie widać żadnego wpływu.


Robić przedwczesne Abstrakcja czy nie robić

Wygląda na to, że to kolejna sytuacja gdzie trzeba użyć mózgu a nie prostych regułek. Do następnego!

6 komentarzy:

  1. Ciekawe masz kolego wpisy, tylko troche te knajackie wstawki raza. Troche niepotrzebne imho.

    OdpowiedzUsuń
  2. A jak dla mnie podkreślają te wstawki powagę sytuacji. Sam na codzień oduczyłem się urzywać wulgarnego języka, ale jak na takie natrafię na blogu to się miło uśmiecham :)

    OdpowiedzUsuń
  3. Tak, bluzgi. Moze jestem starej daty ... ;)

    OdpowiedzUsuń
  4. Dałbym +1 Bartoszowi. Wpisy super, bluzgi zbędne (albo raczej: szkodliwe).

    OdpowiedzUsuń
  5. To jest pewien konflikt pomiędzy tożsamością i autentycznością pisarską a tym co jest powszechnie przyjęte za "właściwe". Górale mówią "bździna", gdzie indziej mówią "acmol" a szare bloki maja swój język. Wydaje mi się, że i tak najwięcej zła w tym kraju uczynione wymawiając podniosłe politycznie poprawne formułki, zaś język dosadny niesie według mnie pewną dozę autentyczności. Z drugiej strony rozumiem, że nie wszyscy to trawią (chociaż część osób sobie chwali). Może czas wypracować jakiś kompromis w stylu Borewicza - "motyla noga" i "niechajże Geś to kopnie" ;)

    OdpowiedzUsuń